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