跨伺服器存取資料是分散式資料庫常見需求。SQL Server 提供 連結伺服器 (永久性) 與 OPENROWSET (臨時性) 兩大方案。本文深入解析 OPENROWSET 語法、參數、適用場景與實戰範例,助你選型決策。
OPENROWSET (
'provider_name',
{ 'datasource' ; 'user_id' ; 'password' | 'provider_string' },
{ [catalog.][schema.]object | 'query' }
)
| 參數 | 說明 |
|---|---|
provider_name | OLE DB Provider 登錄名稱,如 SQLOLEDB、MSDASQL |
datasource | 資料來源識別:資料庫檔案名、伺服器名或 Provider 理解的定位字串 |
user_id / password | 連線認證資訊,對應 DBPROP_AUTH_USERID/PASSWORD |
provider_string | 完整連線字串,封裝所有初始化屬性 (優先於 datasource/user/password) |
catalog / schema / object | 三段式物件名稱:資料庫.結構描述.資料表 |
query | 直接傳遞給 Provider 執行的命令字串 (Pass-through Query) |
USE pubs;
GO
SELECT a.*
FROM OPENROWSET(
'SQLOLEDB',
'seattle1'; 'sa'; 'MyPass',
'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname'
) AS a;
GO
| 維度 | OPENROWSET | 連結伺服器 |
|---|---|---|
| 生命週期 | 單次查詢、臨時需求 | 長期、重複使用 |
| 安全性管理 | 字串內明文帳密 (風險較高) | 集中管理登入映射、可用 Windows 驗證 |
| 效能 | 每次重新建立連線 | 連線池複用、統計資訊快取 |
| 支援 DML | 視 Provider 能力支援 INSERT/UPDATE/DELETE | 完整支援分散式交易 (MS DTC) |
| 查詢優化 | 遠端查詢計劃由遠端優化器決定 | 本地優化器可參考遠端統計資訊 |
sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;SELECT 權限,遵循最小權限原則uniqueidentifier、xml 等特殊型別可能需轉換OPENDATASOURCE (類似但語法不同)、Linked Server + EXECUTE AT、PolyBase (SQL 2016+ 查詢外部資料)OPENROWSETSSIS、BCP 或 INSERT ... SELECT FROM OPENROWSET 批次處理善用兩大工具特性,讓跨伺服器資料整合更安全、高效、可維護。