ホームページ > データベース > mysql チュートリアル > SQL Server で OPENQUERY にパラメータを渡すにはどうすればよいですか?

SQL Server で OPENQUERY にパラメータを渡すにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-14 12:27:42
オリジナル
356 人が閲覧しました

How Can I Pass Parameters to an OPENQUERY in SQL Server?

SQL Server の OPENQUERY にパラメータを渡す

SQL Server の OPENQUERY ステートメントは、リンク サーバー上でクエリを実行します。 ただし、OPENQUERY ステートメント内にパラメータを直接埋め込むことはサポートされていません。 Microsoft のドキュメントには、OPENQUERY が引数として変数を受け入れないことが明確に記載されています。 効果的な回避策を検討してみましょう:

方法 1: 値をハードコーディングする (限られた数のパラメータの場合)

このアプローチは、少数の特定の値のみを渡す必要がある場合に適しています。 文字列の連結はクエリの構築に使用されます:

<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: 動的クエリの構築 (より複雑なクエリまたは動的リンク サーバー名の場合)

リンク サーバー名が可変であるより複雑なクエリまたはシナリオの場合、動的 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート