web-dev-qa-db-ja.com

with(nolock)or(nolock)-違いはありますか?

すべては、with(nolock)が状況に完全に適しているという仮定に基づいています。with(nolock)を使用するかどうかを議論する多くの質問が既にあります。

with(nolock)の使用と実際の違いがあるかどうかを調べましたが、見つけることができませんでした:

select customer, zipcode from customers c with(nolock) 

あるいは単に (nolock)

select customer, zipcode from customers c (nolock) 

2つの間に機能的な違いはありますか?文体?
一方が他方より古く、廃止される可能性がありますか?

41
Rob

機能的な違いはありませんが、最終的にWITHなしの構文は機能しません。これは廃止されました:

select customer, zipcode from customers c (nolock) 

したがって、次の形式を使用する必要があります。

select customer, zipcode from customers c with (nolock) 

少なくともSQL Server 2008以降、テーブルヒントにWITHキーワードを使用しないことは推奨されていません。次のトピックでSpecifying table hints without using the WITH keyword.

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

(もちろん、nolockを使用すべきかどうかについての議論は別です。 私はそれらについてここにブログで書いています 。)

51
Aaron Bertrand

SQL Server 2000バージョンでは、(nolock)とwith(nolock)... with(nolock)の違いを見つけることはできません。

また、リンクサーバーからデータをプルしようとすると、 '(nolock)'を使用する必要があるのに対して、 '(nolock)'は機能しません。

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

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

使用しているSQL Serverのバージョンによって異なります。

SQL Server 2012の最新のドキュメントを確認する テーブルヒントWITHを省略することは非推奨の機能です。したがって、from customers c (nolock)はおそらく機能します。あなたは本当にfrom customers c WITH (nolock)を使用する必要があります

これはfrom customers nolockとは異なることに注意してください。 nolockはテーブルエイリアスとして機能します。

機能的に;それらは同じように見えます。

3
Jim B

170000以上のデータ行の結果に対してこれを試しましたが、クエリ実行プランに違いは見られませんでした。両方とも同じように機能します。

2
Avinash