すべては、with(nolock)が状況に完全に適しているという仮定に基づいています。with(nolock)を使用するかどうかを議論する多くの質問が既にあります。
with(nolock)
の使用と実際の違いがあるかどうかを調べましたが、見つけることができませんでした:
select customer, zipcode from customers c with(nolock)
あるいは単に (nolock)
:
select customer, zipcode from customers c (nolock)
2つの間に機能的な違いはありますか?文体?
一方が他方より古く、廃止される可能性がありますか?
機能的な違いはありませんが、最終的に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
を使用すべきかどうかについての議論は別です。 私はそれらについてここにブログで書いています 。)
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)
使用しているSQL Serverのバージョンによって異なります。
SQL Server 2012の最新のドキュメントを確認する テーブルヒントWITH
を省略することは非推奨の機能です。したがって、from customers c (nolock)
はおそらく機能します。あなたは本当にfrom customers c WITH (nolock)
を使用する必要があります
これはfrom customers nolock
とは異なることに注意してください。 nolockはテーブルエイリアスとして機能します。
機能的に;それらは同じように見えます。
170000以上のデータ行の結果に対してこれを試しましたが、クエリ実行プランに違いは見られませんでした。両方とも同じように機能します。