1

今天发现我的自动增量主键在插入语句错误时仍然增加,结果导致我们的表中有“缺少”数字,这一点令人惊讶。SQL不会在插入错误时增加主键

SQL有什么理由这样设计的?有什么办法可以覆盖这种行为?

我正在通过Linq-to-SQL访问。

+0

为什么“缺少”数字这么重要?可能有重写的方式,但听起来更像是您在处理事物时需要解决的问题,这些问题需要在破解身份识别功能之前解决。 – 2010-12-22 16:36:54

回答

6

这是设计来处理并发并尽可能快(如果3次插入同时发生,1次回滚会发生什么事情......这将搞乱一切)..当插入开始时sql server确定身份的价值..如果发生回滚,那些值不会被重用..除非您想在每次回滚后运行DBCC CHECKIDENT,否则没有什么可以真正做到的。

如果您需要一个查询差距,看看这个How to return all the skipped identity values from a table in SQL Server

SQL Server的下一个版本将有sequences这可能会帮助你的一些东西,看看这里:A first look at sequences in SQL Server Denali