2
我在SQL Server數據庫中有一個表。它在位置(一個整數)和CaseNumber(也是一個整數)上有一個由兩部分組成的自然鍵。當我創建新記錄時,我想指定位置併爲我生成CaseNumber,這樣對於任何一個位置,所有個案號碼都是唯一的,遞增的並且沒有間隙。表中的記錄永遠不會被刪除。基於另一列創建遞增數字以形成兩部分密鑰
確保安全併發更新的最佳方法是什麼?
我在SQL Server數據庫中有一個表。它在位置(一個整數)和CaseNumber(也是一個整數)上有一個由兩部分組成的自然鍵。當我創建新記錄時,我想指定位置併爲我生成CaseNumber,這樣對於任何一個位置,所有個案號碼都是唯一的,遞增的並且沒有間隙。表中的記錄永遠不會被刪除。基於另一列創建遞增數字以形成兩部分密鑰
確保安全併發更新的最佳方法是什麼?
此之前已經覆蓋,但這裏有一些總體思路:
添加UNIQUE INDEX
覆蓋Location, CaseNumber
。如果你的併發檢查失敗,這將防止愚蠢行爲。
封裝您的代碼以在交易中檢查/插入新的最大值。這不是很好,但它如何確保不會出現併發問題。
即..
DECLARE @Max int
BEGIN TRAN
SET @Max = (SELECT MAX(CaseNumber) FROM MyTable WITH (TABLOCK)
WHERE Location = @Location) + 1
INSERT INTO MyTable
@Location, @Max
COMMIT TRAN
一些挖後,我發現[這個答案](http://stackoverflow.com/questions/1223287/per-entity-autoincrement-field-in-sql-server) 。似乎沒有什麼沒有答案,所以:) – Jacob