首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 跨伺服器查詢方案:OPENROWSET 與連結伺服器實戰比較

     編輯:關於SqlServer

跨伺服器存取資料是分散式資料庫常見需求。SQL Server 提供 連結伺服器 (永久性) 與 OPENROWSET (臨時性) 兩大方案。本文深入解析 OPENROWSET 語法、參數、適用場景與實戰範例,助你選型決策。

OPENROWSET 核心語法

OPENROWSET (
    'provider_name',
    { 'datasource' ; 'user_id' ; 'password' | 'provider_string' },
    { [catalog.][schema.]object | 'query' }
)

參數詳解

參數說明
provider_nameOLE 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)

實戰範例:臨時查詢遠端伺服器 authors 表

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 vs 連結伺服器:如何選擇?

維度OPENROWSET連結伺服器
生命週期單次查詢、臨時需求長期、重複使用
安全性管理字串內明文帳密 (風險較高)集中管理登入映射、可用 Windows 驗證
效能每次重新建立連線連線池複用、統計資訊快取
支援 DML視 Provider 能力支援 INSERT/UPDATE/DELETE完整支援分散式交易 (MS DTC)
查詢優化遠端查詢計劃由遠端優化器決定本地優化器可參考遠端統計資訊

進階技巧與注意事項

  • Ad Hoc Distributed Queries:預設關閉,需啟用 sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
  • 唯讀/權限:遠端帳號僅需 SELECT 權限,遵循最小權限原則
  • 防火牆/網路:確保 1433 (或自訂埠) 通達,Named Pipes 需 445
  • 資料型別對應:遠端 uniqueidentifier、xml 等特殊型別可能需轉換
  • 替代方案:OPENDATASOURCE (類似但語法不同)、Linked Server + EXECUTE AT、PolyBase (SQL 2016+ 查詢外部資料)

最佳實務建議

  1. 固定跨伺服器存取 → 建立連結伺服器,集中管控安全與效能
  2. 一次性報表、ETL 腳本、異構資料源探勘 → 使用 OPENROWSET
  3. 生產環境嚴禁在程式碼/預存程序硬編碼帳密,改用連結伺服器登入映射
  4. 大量資料搬移考慮 SSIS、BCP 或 INSERT ... SELECT FROM OPENROWSET 批次處理

善用兩大工具特性,讓跨伺服器資料整合更安全、高效、可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved