2
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文で次のエラー
構文エラーを取得しています。構文エラー行1トークンまたはそれ以降[10179]。
メッセージ7321、レベル16、状態2、行4
エラーがクエリを準備しながら、リンクサーバー「LINKSERVER12」のためのOLE DBプロバイダ「MSDASQL」に対する実行のための「会社名= @compからIDを選択」が発生しました。
エラーは、動的クエリ私は運と'@comp''
、''''@comp''''
'でSQLクエリで@comp
を交換しようとした
N'SELECT @csid = id FROM OPENQUERY(LINKSERVER12,
''SELECT id from company where name = @comp'')'
で起こっています。どんな助けでも大歓迎です。
"SET QUOTED_IDENTIFIER OFF"を使用すると、一重引用符ではなく二重引用符を使用して文字列クエリを区切ることができます。これはあなたの問題を解決するものではありませんが、一重引用符の1組をエスケープする必要はありません。 – DarrenMB
名前 '@comp'、N '@ comp nvarchar(50)、@csid nvarchar(MAX)OUTPUT'、@comp = @という会社からの 'EXEC LINKSERVER12.master.dbo.sp_executesql N'SELECT id '会社、@ csid = @id OUTPUT '?それに似た何か。多層引用符を避けることができます。 – hastrb