2012-08-24 115 views
34

一切都基於這樣的假設,與(NOLOCK)是完全適合於situtation。關於是否使用(nolock),已經有很多問題了。- 有區別嗎?

我環顧四周,並一直沒能找到,如果有使用with(nolock)之間的實際差異:

select customer, zipcode from customers c with(nolock) 

或只是(nolock)

select customer, zipcode from customers c (nolock) 

是否有功能兩者的區別?文體?
比另一個更老,有被棄用的可能性嗎?

+1

在這裏看到:http://stackoverflow.com/questions/1723910/syntax-for-nolock-in-sql – paul

+2

他們是別名。當使用另一個選項指定提示時,必須使用WITH關鍵字指定提示:'FROM t WITH(TABLOCK,INDEX(myindex))'http://msdn.microsoft.com/en-us/library/ms187373。asol – edze

+1

Nolock也可以稱爲READUNCOMMITTED,它只應用於SELECT語句。它指定不能對該表發出共享鎖,這會阻止其他事務修改表中的數據。看看這篇文章http://www.sqlserverlogexplorer.com/difference-between-nolock-and-with-nolock/ –

回答

45

沒有功能上的差異,但最終沒有WITH語法將無法正常工作。這已被棄用:

select customer, zipcode from customers c (nolock) 

所以,你應該使用以下格式:

select customer, zipcode from customers c with (nolock) 

不使用表提示WITH關鍵字,因爲至少SQL Server 2008中已被棄用搜索以下話題短語Specifying table hints without using the WITH keyword.

http://msdn.microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(你是否應該使用討論當然,nolock當然是分開的。 I've blogged about them here

+0

有關何時使用'(nolock)'的參考: http://stackoverflow.com/questions/686724/sql-when-you-use-with-nolock?rq = 1 – Rob

+1

@Rob你的意思是什麼時候*不使用'NOLOCK',對吧? :-) –

+0

@AaronBertrand您指定的MSDN鏈接指示不建議僅爲UPDATE和DELETE語句使用NOLOCK。它似乎不被推薦用於SELECT語句。 – Dono

3

這實際上取決於您所在的SQL Server版本。

檢出SQL Server 2012的最新文檔table hints省略WITH是不推薦使用的功能。所以雖然from customers c (nolock)可能會工作;你應該使用from customers c WITH (nolock)

注意,這是不同於from customers nolock; nolock將作爲表別名。

功能上;他們似乎是一樣的。

2

我想這對於一個170000+數據行的結果,但我沒有看到通過查詢執行計劃的任何差異。兩者都以相同的方式工作。

+6

這應該是一個評論,而不是一個答案。它已經提到過兩次,一年前沒有功能差異。 – Leigh

+1

給這個人休息一下,你會... –

+0

很高興知道你已經把這些計劃放在一張不小的桌子上。爲了將來的參考,知道您正在使用哪個版本的SQL Server可能會有幫助。 (無論如何+1) –

5

雖然我們沒有發現之間(NOLOCK)與差異(NOLOCK)......與(NOLOCK)將不會在SQL Server 2000版本。

而且我還注意到,當您嘗試從鏈接服務器中提取數據,只是「(NOLOCK)」將無法正常工作,而你應該「與(NOLOCK)」使用。

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock) 

-- this will work 
select * from server1.DB1.dbo.table1 with (nolock) 
+1

感謝您抽出寶貴時間。這應該是Aaron上面的帖子的評論,但我可以看到你還沒有發表評論的聲望。 +1讓你順利。 – Rob