http://blog.chinaunix.net/u2/65729/showart_1728182.html
在 MS SQL Server 中訪問其他遠端資料庫的資料可以通過 OPENQUERY (Transact-SQL) 函數來實現。首先建立一個連結的伺服器,然後像普通表一樣維護遠端資料。 ms sql server 連結的伺服器的建立方法:
EXEC sp_addlinkedserver
'lkTest',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=192.168.0.224;UID=sa;PWD=sa;' 檢查連結的伺服器的可用性:
select * from
openquery(lkTest,'select * from pubs.dbo.jobs') 如果遠端ms sql server資料庫無法訪問,報錯:[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB provider returned message:
[Microsoft][ODBC SQL Server Driver][SQL Server]使用者 'sa' 登入失敗。原因: 未與信任 SQL Server 串連相關聯。]檢查網路、sa密碼都無誤後仍無法串連,可以嘗試安裝ms sql server 的sp3來解決。
OPENQUERY() 函數介紹對給定的連結的伺服器執行指定的傳遞查詢。該伺服器是 OLE DB 資料來源。OPENQUERY 可以在查詢的 FROM 子句中引用,就好象它是一個表名。OPENQUERY 也可以作為 INSERT、UPDATE 或 DELETE 語句的目標表進行引用。但這要取決於 OLE DB 提供者的功能。儘管查詢可能返回多個結果集,但是 OPENQUERY 只返回第一個。
文法
OPENQUERY ( linked_server ,'query' )
參數
linked_server
表示連結的伺服器名稱的標識符。'query'
在連結的伺服器中執行的查詢字串。該字串的最大長度為 8 KB。
備忘
OPENQUERY 不接受其參數的變數。在 SQL Server 2000 和更高版本中,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 傳遞查詢
UPDATE OPENQUERY (linked_server, 'SELECT title, content FROM msgs WHERE id=1')
SET title = 'newTitle', content = 'newContent'; C. 執行 INSERT 傳遞查詢
INSERT OPENQUERY (linked_server, 'SELECT title, content FROM msgs')
VALUES ('title', 'content'); D. 執行 DELETE 傳遞查詢
以下樣本使用 DELETE 傳遞查詢刪除。
DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');
參考
sp_linkedservers 檢查當前連結的伺服器,直接執行即可看到結果
sp_addlinkedserver 配置連結的伺服器
企業管理器中管理連結的伺服器