2

今日、 を使用してリモート テーブルにアクセスしようとして問題が発生しましたNOLOCK。このエラーを受け取りました:

Remote table-valued function calls are not allowed.

問題をグーグルで調べたところ、追加WITH (NOLOCK)すると問題が修正されることがわかりました。なぜだろう?

SQL:

SELECT *
FROM [LINKED_SRV].[DB1].[dbo].[REMOTE_TABLE] WITH (NOLOCK)
4

2 に答える 2

3

テーブルヒントのドキュメントを引用:

重要

WITH キーワードの省略は非推奨の機能です。この機能は、Microsoft SQL Server の将来のバージョンでは削除される予定です。新しい開発作業でこの機能を使用することは避け、現在この機能を使用しているアプリケーションを変更することを計画してください。

NOLOCK、READUNCOMMITTED、UPDLOCK、REPEATABLEREAD、SERIALIZABLE、READCOMMITTED、TABLOCK、TABLOCKX、PAGLOCK、ROWLOCK、NOWAIT、READPAST、XLOCK、および NOEXPAND は、WITH キーワードの有無に関係なく使用できます。これらのテーブル ヒントを WITH キーワードなしで指定する場合は、ヒントを単独で指定する必要があります。

ドキュメントには、試行されたクエリについて、WITHキーワードの省略が許可されていると記載されています。それに基づいて、私はこれをバグと見なします。ただし、ドキュメントには、この機能は非推奨であり、SQL Server の将来のバージョンでは削除されると記載されているため、ドキュメントの変更以外の方法でこのバグが修正されるとは思わないでください。

パーサーはFROM server.database.schema.table (、これがユーザー定義関数の呼び出しであるためエラーであると認識してNOLOCK判断し、関数の引数ではないことを認識できるようになることはないと思います。

于 2013-06-21T19:32:26.130 に答える
0

ノーロック

このテーブル ヒントは READUNCOMMITTED とも呼ばれ、SELECT ステートメントにのみ適用されます。NOLOCK は、他のトランザクションがテーブル内のデータを変更することを禁止する共有ロックがテーブルに対して発行されないことを示します。

http://www.techrepublic.com/article/using-nolock-and-readpast-table-hints-in-sql-server/6185492

于 2013-06-21T19:35:30.077 に答える