對給定的鏈接服務器執行指定的傳遞查詢。該服務器是 OLE DB 數據源。OPENQUERY 可以在查詢的 FROM 子句中引用,就好象它是一個表名。OPENQUERY 也可以作爲 INSERT、UPDATE 或 DELETE 語句的目標表進行引用。但這要取決於 OLE DB 訪問接口的功能。儘管查詢可能返回多個結果集,但是 OPENQUERY 只返回第一個。
Transact-SQL 語法約定
OPENQUERY ( linked_server ,'query' )
- linked_server
-
表示鏈接服務器名稱的標識符。
- ' query '
-
在鏈接服務器中執行的查詢字符串。該字符串的最大長度爲 8 KB。
OPENQUERY 不接受其參數的變量。
OPENQUERY 不能用於對鏈接服務器執行擴展存儲過程。但是,通過使用四部分名稱,可以在鏈接服務器上執行擴展存儲過程。例如:
EXEC SeattleSales.master.dbo.xp_msver
任何用戶都可以執行 OPENQUERY。用於連接到遠程服務器的權限是從爲鏈接服務器定義的設置中獲取的。
A. 執行 SELECT 傳遞查詢
以下示例將使用“用於 Oracle 的 Microsoft 訪問接口”針對 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''');