SQL不会在INSERT错误上增加主键

时间:2010-12-22 16:32:56

标签: linq-to-sql sql-server-2008 error-handling primary-key auto-increment

今天有点惊讶发现当插入语句错误时我的自动增量主键仍然会增加,结果是我们的表中有“缺少”数字。

为什么SQL是这样设计的?有没有办法覆盖这种行为?

我通过Linq-to-SQL访问。

1 个答案:

答案 0 :(得分: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