OPENQUERY

OPENQUERY (Transact-SQL)

 

對給定的鏈接服務器執行指定的傳遞查詢。該服務器是 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 傳遞查詢。

ms188427.note(zh-cn,SQL.105).gif注意:
本示例假定已經創建了一個名爲 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''');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章