適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

指定されたパススルー クエリを、指定されたリンク サーバーで実行します。Executes the specified pass-through query on the specified linked server. このサーバーは OLE DB データ ソースです。This server is an OLE DB data source. OPENQUERY は、テーブル名と同じように、クエリの FROM 句で参照できます。OPENQUERY can be referenced in the FROM clause of a query as if it were a table name. OPENQUERY は、INSERT、UPDATE、または DELETE ステートメントの対象のテーブルとしても参照できます。OPENQUERY can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement. これは OLE DB プロバイダーの機能により制限されます。This is subject to the capabilities of the OLE DB provider. クエリでは複数の結果セットが返されることがありますが、OPENQUERY では最初の 1 つのみが返されます。Although the query may return multiple result sets, OPENQUERY returns only the first one.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions


OPENQUERY ( linked_server ,'query' )  


リンク サーバーの名前を表す識別子です。Is an identifier representing the name of the linked server.

' query '' query '
リンク サーバーで実行されるクエリ文字列です。Is the query string executed in the linked server. 文字列の最大長は 8 KB です。The maximum length of the string is 8 KB.


OPENQUERY は、その引数で変数を受け入れません。OPENQUERY does not accept variables for its arguments.

OPENQUERY を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできません。OPENQUERY cannot be used to execute extended stored procedures on a linked server. ただし、4 つの要素で構成される名前を使用して、リンク サーバーで拡張ストアド プロシージャを実行することはできます。However, an extended stored procedure can be executed on a linked server by using a four-part name. 例:For example:

EXEC SeattleSales.master.dbo.xp_msver  

FROM 句での OPENDATASOURCE、OPENQUERY、または OPENROWSET の呼び出しは、更新の対象として使用されるこれらの関数の呼び出しとは別に評価されます。これは、両方の呼び出しに同じ引数が指定されている場合にも当てはまります。Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. 特に、いずれか一方の呼び出しの結果に適用されるフィルター条件または結合条件は、もう一方の結果に影響しません。In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.


すべてのユーザーが OPENQUERY を実行できます。Any user can execute OPENQUERY. リモート サーバーへの接続に使用される権限は、リンク サーバー用の定義から取得されます。The permissions that are used to connect to the remote server are obtained from the settings defined for the linked server.


A.A. B. UPDATE パススルー クエリを実行するExecuting an UPDATE pass-through query

次の例では、例 A で作成したリンク サーバーに対して、UPDATE パススルー クエリを使用します。The following example uses a pass-through UPDATE query against the linked server created in example A.

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

B.B. INSERT パススルー クエリを実行するExecuting an INSERT pass-through query

次の例では、例 A で作成したリンク サーバーに対して、INSERT パススルー クエリを使用します。The following example uses a pass-through INSERT query against the linked server created in example A.

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

C.C. DELETE パススルー クエリを実行するExecuting a DELETE pass-through query

次の例では、DELETE パススルー クエリを使用して、例 C で追加した行を削除します。The following example uses a pass-through DELETE query to delete the row inserted in example C.

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

D.D. SELECT パススルー クエリを実行するExecuting a SELECT pass-through query

次の例では、SELECT パススルー クエリを使用して、例 C で追加した行を選択します。The following example uses a pass-through SELECT query to select the row inserted in example C.

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

参照See Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
行セット関数 (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)