ホームページ >データベース >mysql チュートリアル >SQL Server で OPENQUERY にパラメータを渡すにはどうすればよいですか?
OPENQUERY でのパラメータの受け渡し: 回避策
SQL Server の OPENQUERY
コマンドを使用すると、リンク サーバーのクエリが容易になります。 ただし、変数をパラメータとして直接渡すことはサポートされていません。 この記事では、効果的な回避策について説明します。
パラメータ化されたクエリのメソッド
OPENQUERY
:
1. 基本値のハードコーディング:
構造は既知だが特定の値が必要なクエリの場合、動的 SQL が解決策を提供します。
<code class="language-sql">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);</code>
2. クエリ全体を渡す:
このアプローチは、T-SQL クエリ全体またはリンク サーバー名 (あるいはその両方) を動的に決定する必要があるシナリオに最適です。
<code class="language-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);</code>
3. sp_executesql
の活用:
複雑な引用を簡素化するために、sp_executesql
ストアド プロシージャがよりクリーンな代替手段を提供します。
<code class="language-sql">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;</code>
これらの手法を採用することで、開発者はパラメーター化されたクエリを OPENQUERY
にうまく組み込むことができ、その固有の制限を克服できます。 特定のニーズとクエリの複雑さに最も適した方法を選択してください。
以上がSQL Server で OPENQUERY にパラメータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。