3

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

对不起外行​​语言。我不是数据库人。

4

2 回答 2

4

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

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

请参阅:即使事务回滚,SQL 标识(自动编号)也会增加

另一个问题是您可能只是在检查数据而不对其进行排序?并且当您移植数据时,您认为它会始终按 ID 顺序插入或检索。但是因为新表没有以相同的方式“索引”,所以您不一定会按主键顺序查看项目。如果行在大多数情况下出现连续的间隙,则这种情况不太可能发生,但值得一提。

于 2012-12-21T18:28:03.547 回答
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**
于 2012-12-21T18:43:52.183 回答