4

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

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

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

我在 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

4 回答 4

5

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

在这里查看更多

此外,如果您删除数据,您将不会再次获得生成的数字,除非您重新播种。看这里

于 2012-08-22T13:50:49.320 回答
0

关于“插入失败”的@ElVieejo +1。另一种可能性是,某人或某物可能正在添加特定值(SET IDENTITY_INSERT ON)——这可能解释了巨大的差距。

于 2012-08-22T13:53:18.720 回答
0

如果正在复制数据库并且正在使用自动身份范围管理,那么这种差距并不少见。

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

于 2012-08-22T13:52:05.163 回答
0

不保证身份会增加 1。请参阅Microsoft 页面上的“连续值” 。另请参阅:身份增量在 SQL Server 数据库中跳跃

于 2019-05-09T15:21:43.790 回答