web-dev-qa-db-ja.com

SQL Serverでリンクサーバーの動的クエリを作成する

リンクサーバーで実行される動的クエリをSQL Serverで作成したいと思います。私は次のようにしようとしています。

USE [MYDB]
GO

DECLARE @company AS nvarchar(50);
DECLARE @id nvarchar(MAX);
DECLARE @query nvarchar(MAX);

SET @company = 'mycompany.com';
SET @query = N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12, 
   ''SELECT id from company where name = @comp'')';
EXECUTE sp_executesql @company_query, N'@comp nvarchar(50), @csid 
nvarchar(MAX) OUTPUT', @comp = @company,@csid = @id OUTPUT

上記のスクリプトでは、@compの値を動的に渡します。そのため、sp_executesqlを使用してSQLを実行しているときに入出力変数を設定してみました。

次のエラーが発生します

SQLステートメントの構文エラー。トークン。[10179]以降の構文エラー行1。

メッセージ7321、レベル16、状態2、行4
クエリOLEリンクサーバー "LINKSERVER12"のDBプロバイダー "MSDASQL"に対して実行するクエリ "名前= @compの会社からのSELECT id"の準備中にエラーが発生しました。

エラーは動的クエリで発生しています

N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12, 
   ''SELECT id from company where name = @comp'')'

SQLクエリの@compを ''@comp''''''@comp''''に置き換えてみました。どんな助けでも大歓迎です。

3
Arun Rahul

あなたはこの方法でそれを行うことができます:

DECLARE @company AS nvarchar(50);
DECLARE @id nvarchar(MAX);
DECLARE @query nvarchar(MAX) = N'SELECT @id = id from company where name = @comp';

exec [LINKSERVER12].[MYDB].sys.sp_executesql @query, N'@comp nvarchar(50), @id nvarchar(MAX) OUTPUT', @comp = @company,@id = @id OUTPUT;

select @id;
4
sepupic