(NOLOCK)vs NOLOCK
次のようなクエリを見つけたとき、いくつかのブロッキングを調査していました。 SELECT SomeField FROM SomeTable NOLOCK 私はこれを見てNOLOCK、他のクエリ、この場合はDELETEステートメントをブロックする方法を知りました。私は使用しているロックを簡単に調べましたがsp_lock、ここに私が見たものがあります: DB S GRANT TAB IS GRANT PAG S GRANT さて、私の理解では、これNOLOCKはスキーマ安定性ロックのみを取得することになっていますが、なぜISロックを取得したのですか? 私の好奇心がそそられました。私はBOLを見て、それを使用する2つの方法がWITH (NOLOCK)あり、廃止予定(NOLOCK)であることがわかったので、それらを試してみることにしました。次のクエリを実行した後、実行しましたsp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S GRANT TAB Sch-Sグラント SELECT SomeField FROM SomeTable (NOLOCK) DB S GRANT TAB Sch-Sグラント 案の定、スキーマ安定性ロックがあります。だから私の質問はこれです:ここで何が起こっているのですか?NOLOCKを使用するために受け入れられ構文のいずれかである場合WITH (NOLOCK)や(NOLOCK)、なぜクエリのエラーは、それが単なるを実行したときに出ませんNOLOCK(括弧なし)?サポートされている場合、ISロックを取得するのはなぜですか?ここに何が欠けていますか?私はオンラインで答えを探していましたが、今のところ不足しています。 これを2008R2と2012の両方でテストしました。