我有一个带有递增字段的表。该字段的值为 ,1, 2, 3...60
然后该字段为1060
。
我不知道为什么?
id 的下一个值必须是61
。
我有一个带有递增字段的表。该字段的值为 ,1, 2, 3...60
然后该字段为1060
。
我不知道为什么?
id 的下一个值必须是61
。
这是 SQL Server 2012 的新功能。Sequences
默认情况下,标识列的使用和值被兑现以加快插入新行时的速度。当SQL Server意外关闭时,缓存会丢失,并且标识值会继续创建间隙(通常为 1000 或 10000)。
可能有几个原因 - 其中一些最有可能:
DBCC CHECKIDENT ({table}, RESEED, {value});
SET IDENTITY_INSERT ON
不保证自动增量字段是连续的。你保证是独一无二的。如果您需要它们是连续的,那么我建议您自己跟踪下一个 ID,这将需要您考虑并发性、外键引用等。
我假设您的意思是一个增量为 1 的IDENTITY字段。每次插入新记录时,该值都会增加 1。
去引用:
如果频繁删除的表存在标识列,则标识值之间可能会出现间隙。如果这是一个问题,请不要使用 IDENTITY 属性。但是,为了确保没有创建间隙或填补现有间隙,请在使用 SET IDENTITY_INSERT ON 显式输入一个之前评估现有标识值。
正如评论中提到的那样,该表很可能曾经填充了所有缺失值的数据,但这些已被删除。(因为这是一个很大的块,也许这是批量完成的?)