リンク サーバー クエリに変数を渡す

この記事では、リンク サーバー クエリに変数を渡す方法について説明します。

オリジナル製品バージョン: オンライン ブックSQL Server
元の KB 番号: 314520

概要

リンク サーバーに対してクエリを実行する場合は、または OPENDATASOURCE ステートメントを使用するパススルー クエリを頻繁にOPENQUERYOPENROWSET実行します。 SQL Serverオンライン ブックの例を参照して、定義済みの Transact-SQL 文字列を使用してこれを行う方法を確認できますが、これらの関数に変数を渡す方法の例はありません。 この記事では、リンク サーバー クエリに変数を渡す方法の 3 つの例を示します。

パススルー関数のいずれかに変数を渡すには、動的クエリを作成する必要があります。

引用符を含むデータには、特定の処理が必要です。

基本値を渡す

基本的な Transact-SQL ステートメントがわかっていても、1 つ以上の特定の値を渡す必要がある場合は、次のサンプルのようなコードを使用します。

DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)

クエリ全体を渡す

Transact-SQL クエリ全体またはリンク サーバーの名前 (またはその両方) を渡す必要がある場合は、次のサンプルのようなコードを使用します。

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)

Sp_executesql ストアド プロシージャを使用する

多層引用符を回避するには、次の例のようなコードを使用します。

DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

関連項目

詳細については、次のトピックをご覧ください。