この記事では、リンク サーバー クエリに変数を渡す方法について説明します。
元の製品バージョン: SQL Server オンライン ブック
元の KB 番号: 314520
まとめ
リンク サーバーに対してクエリを実行する場合、 OPENQUERY、 OPENROWSET、または OPENDATASOURCE ステートメントを使用するパススルー クエリを頻繁に実行します。 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
参照
詳細については、次のトピックを参照してください。