2010-01-21 70 views
1

當SQL客戶端發出以下命令:SQL服務器NOLOCK關鍵字

select * into tbl2 
FROM tbl1 (nolock) 
WHERE DateCreated < '2009/01/01' 

豈不是該命令將不會鎖定TBL1它不會被其他未提交的事務被阻止作出tbl1

更新:

[NOLOCK]:指定髒讀是允許的。不會發出共享鎖以防止其他事務修改當前事務讀取的數據,並且由其他事務設置的排他鎖不會阻止當前事務讀取鎖定的數據。 REF:MSDN

回答

4

這意味着第一個;你沒有拿出任何鎖因此第二;你不會被其他公開交易阻止。請參閱table hints上的MSDN文檔。

以下是關於transaction isolation levels上MSDN文檔的鏈接 - 如果您正在考慮使用NOLOCK,可能會有所幫助。 NOLOCK將SQL語句隔離級別讀取未提交。如果您有多語句事務,則可以爲大多數事務設置較低級別的隔離級別,並在需要時進行提升,而不是僅在事務中的一個或多個語句中降低級別。

2

兩者。它還將讀取來自其他[未提交]交易(如果有)的未提交數據。