sql server身份规范不是顺序的

时间:2012-08-22 13:44:15

标签: sql-server database

我注意到SQL Sever(2008 express)在插入自动递增标识规范时会随机跳转。

例如,我的一列“HitStat_ID”将按顺序插入15,16,17,18,然后突然间,它将决定跳转到1012,1013,1014 ....然后9120,9121等

真的没关系,只要它们是独特的(它们是),但为什么会这样做?它也在不止一张桌子上做... 奇怪的是,这只是在过去一周左右完成的,但应用程序已经开发了几个月!

ETA:我在ASP.NET VB中工作 这是插入(在这种情况下):

sql = "INSERT INTO [HitStats] ([PageName], [Date_and_Time], [User_ID]) values ('Home',     
'" + TheDateTime + "', '" + Session("User_ID") + "')"
Dim dbcmd As SqlCommand = New SqlCommand(sql, dbconn)
dbcmd.ExecuteNonQuery()
dbcmd.Dispose()

请不要继续关于sql注入等等等等,它不会发生!

4 个答案:

答案 0 :(得分:5)

如果您正在使用应用程序和事务,当您回滚事务时,您将失去生成的自动递增数字。 此外,如果您进行一些插入并回滚它们。

查看更多here

此外,如果删除数据,除非进行重新设定,否则不会再生成这些数字。 见here

答案 1 :(得分:0)

如果正在复制数据库并且正在使用Automatic Identity Range Management,这种差距并不罕见。

身份值块会传递给复制中涉及的每个服务器,以便他们可以分发身份值而无需与其他服务器通信。一旦一个块在服务器上用完,它就会“跳转”到已经分配给它的下一个块,这可能是一个更高范围的值。

答案 2 :(得分:0)

@ElVieejo关于“失败的插入”的

+1。另一种可能性,某人或某事可能会添加特定值(SET IDENTITY_INSERT ON) - 这可能解释了大的差距。

答案 3 :(得分:0)

不能保证身份增加1。请参见Microsoft's page上的“连续值”。另请参见:Identity increment is jumping in SQL Server database