我發出帶有施加UPDLOCK
以下查詢:SqlServer時,是UPDLOCK應用中選擇
select @local_var = Column
from table (UPDLOCK)
where OtherColumn = @parameter
什麼情況是,多個連接打這個例程用於在存儲過程中,計算一個唯一的ID。一旦鎖獲取我們計算下一個id,更新行中的值並提交。這是因爲客戶端對其系統中某些對象ID有特定的格式要求。
UPDLOCK
鎖定正確的行並阻止其他進程,但是每隔一段時間我們會得到一個重複的id。似乎局部變量在行被鎖定之前被賦予當前值。我曾假設在處理陳述的選擇部分之前會獲得鎖定。我使用的是SQLServer 2012
,隔離級別設置爲讀提交。
如果需要其他信息,請讓我知道。或者如果我正在做一些明顯愚蠢的事情,那麼這些信息也是受歡迎的。
的可能的複製[UPDLOCK,HOLDLOCK](http://stackoverflow.com/questions/7843733/confused-about-updlock-holdlock) –
我的問題是不是一般來說,UPDLOCK是關於什麼時候SQL語句的選擇部分與獲得記錄鎖定或在等待鎖定時進行阻塞有關的評估。由於它是單個語句的一部分,我期望(對或錯)在獲取鎖之前不會評估選擇。 –