文章目錄
- A. 執行 SELECT 傳遞查詢
- B. 執行 UPDATE 傳遞查詢
- C. 執行 INSERT 傳遞查詢
- D. 執行 DELETE 傳遞查詢
對給定的連結的伺服器執行指定的傳遞查詢。該伺服器是 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''');
請參閱 參考
DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
行集合函式 (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)
其他資源
分散式查詢