0

我有一个带有递增字段的表。该字段的值为 ,1, 2, 3...60然后该字段为1060

我不知道为什么?

id 的下一个值必须是61

4

3 回答 3

3

这是 SQL Server 2012 的新功能。Sequences默认情况下,标识列的使用和值被兑现以加快插入新行时的速度。当SQL Server意外关闭时,缓存会丢失,并且标识值会继续创建间隙(通常为 1000 或 10000)。

于 2013-08-20T14:49:38.790 回答
1

可能有几个原因 - 其中一些最有可能:

  • 999条记录被删除
  • 尝试了 999 次插入但失败
  • 使用某些东西重置身份值DBCC CHECKIDENT ({table}, RESEED, {value});
  • 某物使用特定 ID 插入了一条记录SET IDENTITY_INSERT ON

保证自动增量字段是连续的。你保证是独一无二的。如果您需要它们是连续的,那么我建议您自己跟踪下一个 ID,这将需要您考虑并发性、外键引用等。

于 2013-08-20T14:27:45.273 回答
0

我假设您的意思是一个增量为 1 的IDENTITY字段。每次插入新记录时,该值都会增加 1。

去引用:

如果频繁删除的表存在标识列,则标识值之间可能会出现间隙。如果这是一个问题,请不要使用 IDENTITY 属性。但是,为了确保没有创建间隙或填补现有间隙,请在使用 SET IDENTITY_INSERT ON 显式输入一个之前评估现有标识值。

正如评论中提到的那样,该表很可能曾经填充了所有缺失值的数据,但这些已被删除。(因为这是一个很大的块,也许这是批量完成的?)

于 2013-08-20T14:21:59.527 回答