我最近不得不将数据库(sql server 2008)移动到另一台服务器,我注意到在其中一个表中,标识列的值开始出现一些意外值。它设置为标识增量为 1 和标识种子为 1 的标识列。在每大约 10 个连续条目之后,它将从另一个更高的数字开始,并在接下来的 10 个左右的条目中增加 1,然后跳到另一个更高的数字。我似乎无法弄清楚这个问题。
抱歉外行语言。我不是数据库人。
最佳答案
这可能不是您的身份 key 的问题,而是用于插入数据的框架或 SP 的问题。如果您有一个插入数据但随后被回滚的存储过程,则 ID 被保留但该行被“删除”。
所以有两个地方需要检查:一个关于您正在使用的框架(NHibernate 或 Entity Framework 等?)...这些框架可能会插入行然后删除它们。第二个要检查的地方是 SPROC 中的 INSERT 语句和您可能期望 ROLLBACK 的其他地方。
参见:SQL Identity (autonumber) is Incremented Even with a Transaction Rollback
另一个问题是您可能只是检查数据而不对其进行排序?当您移植数据时,您假设它总是按 ID 顺序插入或检索。但是因为新表没有以相同的方式“索引”,所以您不一定会以主键顺序看到项目。如果行在大多数时间显示为连续且有间隙,则这种情况不太可能发生,但值得一提。
关于SQL Server 2008 身份 key 自动递增问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995265/