簡體   English   中英

唯一鍵約束違規時的主鍵標識值增量

[英]Primary Key Identity Value Increments On Unique Key Constraint Violation

我有一個SqlServer 2008表,它有一個主鍵(IsIdentity = Yes)和三個構成唯一鍵約束的其他字段。

另外我有一個將記錄插入表中的存儲過程,我使用SqlConnection對象通過C#調用sproc。

C#sproc調用工作正常,但是當C#sproc調用違反Unique Key約束時,我注意到了有趣的結果....

當sproc調用違反Unique Key約束時,拋出SqlException - 這並不奇怪和酷。 但是,我注意到成功添加到表中的下一條記錄的PK值並不比前一條記錄多一個 -

例如:假設該表有五個記錄,其中PK值為1,2,3,4和5.sproc嘗試插入第六條記錄,但違反了唯一鍵約束,因此,第六條記錄不是插入。 然后sproc嘗試插入另一條記錄,這次它成功了。 - 這個新記錄的PK值為7而不是6。

這是正常的行為嗎? 如果是這樣,你能告訴我為什么會這樣嗎? (如果記錄無法插入,為什么PK索引會增加?)

如果這不是正常行為,你能否給我一些提示,看看為什么我會看到這些症狀?

是的,這很正常。

想象一下這里發生的事務,這是在SQL Server上運行的潛在操作順序。

  1. 使用ID 1,2,3,4,5。
  2. 客戶A開始交易。
  3. 客戶端A執行插入但不提交(ID 6)。
  4. 客戶B開始交易。
  5. 客戶端B執行插入但不提交。 (ID 7)。
  6. 客戶A回滾。
  7. 客戶B提交。

由於(不一定存在)此行為的可能性,您會看到在插入失敗時跳過ID 6。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM