OPENQUERY (Transact-SQL)
指定したパススルー クエリを、指定したリンク サーバーで実行します。このサーバーは OLE DB データ ソースです。OPENQUERY は、テーブル名と同じように、クエリの FROM 句で参照できます。また、INSERT、UPDATE、または DELETE ステートメントの対象テーブルとして参照することもできます。これは OLE DB プロバイダの機能により制限されます。クエリでは複数の結果セットが返されることがありますが、OPENQUERY では最初の 1 つのみが返されます。
構文
OPENQUERY ( linked_server ,'query' )
引数
linked_server
リンク サーバーの名前を表す識別子を指定します。'query'
リンク サーバーで実行するクエリ文字列を指定します。文字列の最大長は 8 KB です。
説明
OPENQUERY の引数に変数は指定できません。
OPENQUERY を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできません。ただし、4 つの要素で構成される名前を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできます。次に例を示します。
EXEC SeattleSales.master.dbo.xp_msver
権限
すべてのユーザーが OPENQUERY を実行できます。リモート サーバーへの接続に使用される権限は、リンク サーバー用の定義から取得されます。
例
A. SELECT パススルー クエリを実行する
次の例では、Microsoft OLE DB Provider for Oracle を使用して、Oracle データベースに OracleSvr というリンク サーバーを作成します。次に、このリンク サーバーに対して SELECT パススルー クエリを実行します。
注意 |
---|
この例では、ORCLDB という Oracle データベースの別名が作成されていることを前提としています。 |
EXEC sp_addlinkedserver 'OracleSvr',
'Oracle 7.3',
'MSDAORA',
'ORCLDB';
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles');
GO
B. UPDATE パススルー クエリを実行する
次の例では、例 A で作成したリンク サーバーに対して、UPDATE パススルー クエリを使用します。
UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101')
SET name = 'ADifferentName';
C. INSERT パススルー クエリを実行する
次の例では、例 A で作成したリンク サーバーに対して、INSERT パススルー クエリを使用します。
INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');
D. DELETE パススルー クエリを実行する
次の例では、DELETE パススルー クエリを使用して、例 C で追加した行を削除します。
DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');