0
我有一個存儲過程在SQL Server與以下情形:如何鎖定SQL Server中的競爭條件?
在我的存儲過程中,我有一個獲取最大序列的函數。我得到的最大串口和一個表中插入:在某種程度上,這兩個,獲得相同的最高串例如100,並試圖將其插入MyTable的同時
Set @Serial = GetMaxSerial(...)
Insert Into MyTable (Serial,...) Values (@Serial,...)
有時在執行我的存儲過程2次。第一次插入成功完成,但最後一次失敗,並且出現關於密鑰的錯誤。
如何鎖定這兩行代碼並強制我的sp將這些代碼行一起運行?
還是有更好的解決方案嗎?
使用序列或標識列?否則,使用'UPDLOCK'表提示或在可序列化的事務隔離級別運行事務。如果失敗,請使用應用程序鎖定('sp_getapplock') –
+1 ta.speot.is。 @breceivemail:首先,你可以做的最簡單的事情就是在Serial列上創建一個UNIQUE索引。 *這將防止重複值*。 –