摘自:http://www.cnblogs.com/aji88/archive/2009/11/06/1597263.htmlhtml
對給定的連接服務器執行指定的傳遞查詢。該服務器是 OLE DB 數據源。OPENQUERY 能夠在查詢的 FROM 子句中引用,就好象它是一個表名。OPENQUERY 也能夠做爲 INSERT、UPDATE 或 DELETE 語句的目標表進行引用。但這要取決於 OLE DB 訪問接口的功能。儘管查詢可能返回多個結果集,可是 OPENQUERY 只返回第一個。數據庫
Transact-SQL 語法約定服務器
OPENQUERY ( linked_server ,'query' )
http://ddue.schemas.microsoft.com/authoring/2003/5 NS = "http://ddue.schemas.microsoft.com/authoring/2003/5"spa
表示連接服務器名稱的標識符。code
在連接服務器中執行的查詢字符串。該字符串的最大長度爲 8 KB。server
OPENQUERY 不接受其參數的變量。htm
在 SQL Server 2000 和更高版本中,OPENQUERY 不能用於對連接服務器執行擴展存儲過程。可是,經過使用四部分名稱,能夠在連接服務器上執行擴展存儲過程。例如:blog
EXEC SeattleSales.master.dbo.xp_msver
任何用戶均可以執行 OPENQUERY。用於鏈接到遠程服務器的權限是從爲連接服務器定義的設置中獲取的。接口
如下示例將使用「用於 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
如下示例針對示例 A 中建立的連接服務器使用 UPDATE
傳遞查詢。
UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') SET name = 'ADifferentName';
如下示例針對示例 A 中建立的連接服務器使用 INSERT
傳遞查詢。
INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles') VALUES ('NewTitle');
如下示例使用 DELETE
傳遞查詢刪除示例 C 中插入的行。
DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');