OPENQUERY (Transact-SQL)
更新 : 2006 年 7 月 17 日
指定したパススルー クエリを、指定したリンク サーバーで実行します。このサーバーは OLE DB データ ソースです。OPENQUERY は、テーブル名と同じように、クエリの FROM 句で参照できます。また、INSERT、UPDATE、または DELETE ステートメントの対象テーブルとして参照することもできます。これは OLE DB プロバイダの機能により制限されます。クエリでは複数の結果セットが返されることがありますが、OPENQUERY では最初の 1 つのみが返されます。
構文
OPENQUERY ( linked_server ,'query' )
引数
- linked_server
リンク サーバーの名前を表す識別子を指定します。
- 'query'
リンク サーバーで実行するクエリ文字列を指定します。文字列の最大長は 8 KB です。
解説
OPENQUERY の引数に変数は指定できません。
SQL Server 2000 以降のバージョンでは、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''');
参照
関連項目
DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERT (Transact-SQL)
FILEGROUPPROPERTY (Transact-SQL)
OPENROWSET (Transact-SQL)
行セット関数 (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)
その他の技術情報
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 7 月 17 日 |
|
2006 年 4 月 14 日 |
|