SQL Server 2008身份密钥自动增量问题

时间:2012-12-21 18:22:53

标签: sql sql-server-2008

我最近不得不将数据库(sql server 2008)移动到不同的服务器,我注意到在其中一个表中,identity列的值已经开始获得一些意外的值。它设置为具有标识增量1和标识种子1的标识列。在每10次连续输入之后,它将从另一个更高的数字开始,并为接下来的10个条目增加1,然后再跳到另一个更高的数字。我似乎无法弄清楚这个问题。

对不起外行​​语言。我不是一个DB人。

2 个答案:

答案 0 :(得分:4)

这可能不是您的身份密钥的问题,而是用于插入数据的框架或SP的问题。如果您有一个插入数据但存储为ROLLBACK的存储过程,则会保留该ID,但该行将被“删除”。

有两个地方需要检查:一个是你正在使用的框架(NHibernate,或Entity Framework等?)......那些框架可能会插入行然后删除它们。要检查的第二个地方是SPROC中的INSERT语句以及您可能期望ROLLBACK的其他地方。

请参阅:SQL Identity (autonumber) is Incremented Even with a Transaction Rollback

另一个问题是您可能只是在检查数据而不对其进行排序?当您移植数据时,您认为它将始终以ID顺序插入或检索。但是因为新表没有“索引”,所以你不一定会看到主键顺序的项目。如果行在大多数情况下以间隙显示顺序,则不太可能,但值得一提。

答案 1 :(得分:0)

以下内容将阐明您的问题。

  1. 创建一个带有标识自动增量列的表
  2. 插入10行随机数据
  3. 您会看到ID值为1,2,3,4,5,6,7,8,9,10
  4. delete from mytable where id=10
  5. 在表格中插入另一行
  6. 现在您将看到ID值为1,2,3,4,5,6,7,8,9,**11**