2013-08-21 52 views
1

我想幫助我一個問題,我無法理解msdn的文檔。 如果我有下面的SQL代碼:Sql光標鎖定

declare C1 cursor for select * from tableA 
open C1 
fetch next from C1 into @a, @b.. 
while @@fetch_status = 0 
.. do something very time consuming for each row 
fetch next from C1 into @a, @b.. 
end 
close c1 

當TABLEA鎖定更新?遊標聲明期間?在開放期間,在獲取?或從開始到結束?

謝謝

+1

你是對的marc_s,我已經更新了 – mslliviu

+0

你正在更新的行將在* UPDATE語句運行時被鎖定*或者如果你在交易中有它們,那麼它們將被鎖定直到事務提交(或回滾) –

+0

,以便記錄在行級鎖定,而不是在表級上鎖定? PS:我沒有根據@a對錶進行更改,我在數據庫的其他表中進行了更改 – mslliviu

回答

0

,你要更新行(S)將完全鎖定UPDATE語句運行。或者,如果您在單個事務中的所有語句,那麼這些行將被獨佔鎖定,直到事務提交(或回滾)

默認情況下,SQL Server使用行級鎖定。但是,如果在單個事務中進行超過5000次更新,SQL Server可能會執行一個鎖升級並鎖定整個表,以避免處理太多個人鎖。