OPENQUERY (Transact-SQL)

指定したパススルー クエリを、指定したリンク サーバーで実行します。このサーバーは OLE DB データ ソースです。OPENQUERY は、テーブル名と同じように、クエリの FROM 句で参照できます。また、INSERT、UPDATE、または DELETE ステートメントの対象テーブルとして参照することもできます。これは OLE DB プロバイダーの機能により制限されます。クエリでは複数の結果セットが返されることがありますが、OPENQUERY では最初の 1 つのみが返されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

OPENQUERY ( linked_server ,'query' )

引数

  • linked_server
    リンク サーバーの名前を表す識別子を指定します。

  • 'query'
    リンク サーバーで実行するクエリ文字列を指定します。文字列の最大長は 8 KB です。

説明

OPENQUERY の引数に変数は指定できません。

OPENQUERY を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできません。ただし、4 つの要素で構成される名前を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできます。次に例を示します。

EXEC SeattleSales.master.dbo.xp_msver

FROM 句での OPENDATASOURCE、OPENQUERY、または OPENROWSET の呼び出しは、更新の対象として使用されるこれらの関数の呼び出しとは別に評価されます。これは、両方の呼び出しに同じ引数が指定されている場合にも当てはまります。特に、いずれか一方の呼び出しの結果に適用されるフィルター条件または結合条件は、もう一方の結果に影響しません。

権限

すべてのユーザーが OPENQUERY を実行できます。リモート サーバーへの接続に使用される権限は、リンク サーバー用の定義から取得されます。

使用例

A. UPDATE パススルー クエリを実行する

次の例では、例 A で作成したリンク サーバーに対して、UPDATE パススルー クエリを使用します。

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';

B. INSERT パススルー クエリを実行する

次の例では、例 A で作成したリンク サーバーに対して、INSERT パススルー クエリを使用します。

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');

C. DELETE パススルー クエリを実行する

次の例では、DELETE パススルー クエリを使用して、例 C で追加した行を削除します。

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');