リンクサーバーで実行される動的クエリを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''''
に置き換えてみました。どんな助けでも大歓迎です。
あなたはこの方法でそれを行うことができます:
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;