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

fea*_*net 1 error-handling primary-key auto-increment sql-server-2008 linq-to-sql

今天有点惊讶发现当插入语句错误时我的自动增量主键仍然增加,结果我们在表中有"缺失"数字.

有没有什么理由为什么SQL这样设计?有没有办法来覆盖这种行为?

我通过Linq-to-SQL访问.

SQL*_*ace 6

这是设计来处理并发并使其尽可能快(如果3个插入同时发生会发生什么,1会被回滚......这会搞砸一切)..当插入启动时sql server确定身份的价值..如果发生回滚,那些值就不会被重用了.除非你想在每次回滚后运行DBCC CHECKIDENT,否则你无法真正做到这一点.

如果您需要一个可以识别间隙的查询,请查看此如何从SQL Server中的表中返回所有跳过的标识值

下一个版本的SQL Server sequences可能会帮助你解决这些问题,请看一下:首先看一下SQL Server Denali中的序列