主伺服器 A 需即時查詢伺服器 B 上的資料庫 NZ、AU(即時網站數據),避免 Replication 覆蓋衝突。
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
SELECT * FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=SQLServerName;User ID=sa;Password=xxx'
).Help.dbo.Help_Category;
SELECT * FROM OPENROWSET(
'SQLOLEDB',
'SQLServerName'; 'sa'; 'xxx',
'Help.dbo.Help_Category'
);
EXEC sp_configure 'Ad Hoc Distributed Queries', 0; RECONFIGURE;
EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
缺點:連線字串硬編碼,密碼變更需全域搜尋替換,維護困難。
EXEC sp_addlinkedserver
@server = 'XLING',
@srvproduct = '',
@provider = 'SQLNCLI',
@datasrc = 'SQLServerName2';
SSMS 物件總管 → 伺服器物件 → 連結伺服器 可見 XLING。
SELECT * FROM XLING.PricemeHelp.dbo.Help_Category;
缺點:四段式命名 Server.Database.Schema.Object 仍嫌冗長。
CREATE SYNONYM dbo.Help_Category_NZ FOR XLING.PricemeHelp.dbo.Help_Category;
CREATE SYNONYM dbo.Help_Category_AU FOR XLING.PricemeHelpAU.dbo.Help_Category;
SELECT * FROM Help_Category_NZ;
SELECT * FROM Help_Category_AU;
| 維度 | OPENROWSET/OPENDATASOURCE | 連結伺服器 | 同義詞 |
|---|---|---|---|
| 部署層級 | 語句級 | 伺服器級 | 資料庫級 |
| 認證管理 | 硬編碼 | 連結伺服器屬性統一管理 | 繼承連結伺服器認證 |
| 程式碼簡潔度 | 差 | 中 | 優 |
| 遷移影響面 | 全域搜尋替換 | 修改連結伺服器定義 | 僅修改同義詞定義 |
| 適用場景 | 臨時探查、ETL 腳本 | 固定跨伺服器存取 | 應用程式生產環境 |
DROP/CREATE SYNONYM,應用程式碼零修改Ad Hoc Distributed Queries 後務必關閉,減少攻擊面