今天有点惊讶发现当插入语句错误时我的自动增量主键仍然会增加,结果是我们的表中有“缺少”数字。
为什么SQL是这样设计的?有没有办法覆盖这种行为?
我通过Linq-to-SQL访问。
答案 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