SQL Server 2008 - 标识列跳过行ID

Tim*_*ung 0 sql sql-server

我之前从未见过这样的行,行会是连续的,但我注意到它跳过了一个特定的"ID".... 1 2 3 4 6 7 8 ...缺少5 ...

INSERT存储过程中没有事务,因此无需回滚我们不允许删除记录.

还有什么可以的呢?

小智 8

由于表上的某些其他唯一约束或表中的外键引用而您尝试插入无效的fk值,可能是插入失败.

插入不必在事务中.

即使在失败的插入上,标识值也会递增.

伊戈尔提到了关于身份和交易的重要观点.来自文档:

失败的语句和事务可以更改表的当前标识,并在标识列值中创建间隙.即使尝试将值插入表中的事务未提交,也不会回滚标识值.例如,如果INSERT语句因IGNORE_DUP_KEY违规而失败,则表的当前标识值仍会递增.