2010-03-10 65 views
0

我從來沒有見過這種行,行將順序,但我已經注意到,它跳過了一個特定的「ID」.... 1 2 3 4 6 7 8。 ..缺少5 ...SQL Server 2008 - 標識列跳過行ID

INSERT存儲過程中沒有事務,所以沒有任何回滾 我們不允許刪除記錄。

還有什麼可以的情況?

+3

從來沒有考慮過IDENTITY值在您的應用程序邏輯中是連續的! – 2010-03-10 16:25:25

回答

8

由於表中的某個其他唯一約束或者表中的外鍵引用,可能是失敗的插入,並且您嘗試插入無效的fk值。

插入不一定在事務中。

即使插入失敗,標識值也會增加。

伊戈爾提到關於身份和交易的重要一點。從docs

失敗的報表和交易的 表可以 改變目前的身份,在身份 列值創建的空白。即使嘗試向表中插入 值的 事務未提交,身份值爲 也不會回滾。例如,如果INSERT語句 由於IGNORE_DUP_KEY 違規而失敗,則該表的當前身份值 仍然遞增。

1

任何方式,身份計數器不會恢復您的價值(如果您已經與事務執行或沒有它)。相同的行爲有oracle(序列)。

身份不是事務性的。

您可以使用自己的主鍵計數器並控制對其的訪問。

0

失敗的嘗試會生成標識值,即使它未插入到數據表中。然後,這導致身份的遺失(這是一種恥辱,我無法再找到我已經學習過的帖子!)。