关于增量算子的问题

时间:2013-08-20 14:03:10

标签: sql sql-server tsql sql-server-2012 identity-column

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

我不知道为什么?

id的下一个值必须是61

3 个答案:

答案 0 :(得分:3)

这是SQL Server 2012的一项新功能。标识列使用Sequences,默认情况下会对值进行兑现,以便在插入新行时加快速度。当SQL Server的计划外关闭发生时,缓存将丢失,并且身份值将继续创建的间隙(通常为1000或10000)。

答案 1 :(得分:1)

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

  • 删除了999条记录
  • 尝试了999次插入并失败
  • 使用DBCC CHECKIDENT ({table}, RESEED, {value});
  • 重置身份值
  • 使用SET IDENTITY_INSERT ON
  • 插入了具有特定ID的记录

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

答案 2 :(得分:0)

假设您的意思是IDENTITY字段,增量为1。 每次插入新记录时,这会使值增加1.

引用:

  

如果存在频繁删除,差距的表的标识列   可以在身份值之间发生。如果这是一个问题,请不要使用   IDENTITY属性。但是,要确保没有差距   创建或填补现有差距,评估现有身份   使用SET IDENTITY_INSERT ON显式输入之前的值。

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