我注意到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注入等等等等,它不会发生!
答案 0 :(得分:5)
如果您正在使用应用程序和事务,当您回滚事务时,您将失去生成的自动递增数字。 此外,如果您进行一些插入并回滚它们。
查看更多here
此外,如果删除数据,除非进行重新设定,否则不会再生成这些数字。 见here
答案 1 :(得分:0)
如果正在复制数据库并且正在使用Automatic Identity Range Management,这种差距并不罕见。
身份值块会传递给复制中涉及的每个服务器,以便他们可以分发身份值而无需与其他服务器通信。一旦一个块在服务器上用完,它就会“跳转”到已经分配给它的下一个块,这可能是一个更高范围的值。
答案 2 :(得分:0)
+1。另一种可能性,某人或某事可能会添加特定值(SET IDENTITY_INSERT ON
) - 这可能解释了大的差距。
答案 3 :(得分:0)
不能保证身份增加1。请参见Microsoft's page上的“连续值”。另请参见:Identity increment is jumping in SQL Server database。