我最近不得不将数据库(sql server 2008)移动到不同的服务器,我注意到在其中一个表中,identity列的值已经开始获得一些意外的值。它设置为具有标识增量1和标识种子1的标识列。在每10次连续输入之后,它将从另一个更高的数字开始,并为接下来的10个条目增加1,然后再跳到另一个更高的数字。我似乎无法弄清楚这个问题。
对不起外行语言。我不是一个DB人。
答案 0 :(得分:4)
这可能不是您的身份密钥的问题,而是用于插入数据的框架或SP的问题。如果您有一个插入数据但存储为ROLLBACK的存储过程,则会保留该ID,但该行将被“删除”。
有两个地方需要检查:一个是你正在使用的框架(NHibernate,或Entity Framework等?)......那些框架可能会插入行然后删除它们。要检查的第二个地方是SPROC中的INSERT语句以及您可能期望ROLLBACK的其他地方。
请参阅:SQL Identity (autonumber) is Incremented Even with a Transaction Rollback
另一个问题是您可能只是在检查数据而不对其进行排序?当您移植数据时,您认为它将始终以ID顺序插入或检索。但是因为新表没有“索引”,所以你不一定会看到主键顺序的项目。如果行在大多数情况下以间隙显示顺序,则不太可能,但值得一提。
答案 1 :(得分:0)
以下内容将阐明您的问题。
delete from mytable where id=10
1,2,3,4,5,6,7,8,9,**11**