跨多台 SQL Server 實例查詢、匯入資料,常見於微服務、資料倉庫 ETL、跨庫報表等架構。
-- 建立連結伺服器
EXEC sp_addlinkedserver
@server = 'srv_lnk', -- 連結伺服器別名
@srvproduct = '', -- 產品名稱(SQL Server 可留空)
@provider = 'SQLOLEDB', -- OLE DB 提供者
@datasrc = '遠端伺服器名或 IP'; -- 遠端位址
-- 設定登入對應
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'srv_lnk',
@useself = 'false', -- 不使用當前登入上下文
@locallogin = NULL, -- 所有本機登入
@rmtuser = '用戶名', -- 遠端登入帳號
@rmtpassword = '密碼'; -- 遠端登入密碼
-- 查詢
SELECT * FROM srv_lnk.資料庫名.dbo.表名;
-- 匯入(建立新表)
SELECT * INTO 本地表 FROM srv_lnk.資料庫名.dbo.表名;
EXEC sp_dropserver 'srv_lnk', 'droplogins';
SELECT * FROM OPENROWSET(
'SQLOLEDB',
'SQL伺服器名';'用戶名';'密碼',
'資料庫名.dbo.表名'
);
SELECT * INTO 本地表
FROM OPENROWSET(
'SQLOLEDB',
'SQL伺服器名';'用戶名';'密碼',
'資料庫名.dbo.表名'
);
錯誤:異類查詢要求為連接設置 ANSI_NULLS 和 ANSI_WARNINGS 選項...
解決: 查詢前開啟選項
SET ANSI_NULLS ON;
SET ANSI_WARNINGS ON;
SELECT * FROM srv_lnk.資料庫名.dbo.表名;
錯誤:某機器 MSDTC 服務不可用
解決: **雙向**啟用 MSDTC 服務(預設未啟用)
連結伺服器適合長期、高頻跨伺服器存取,管理集中;OPENROWSET適合臨時、Ad-hoc 查詢。兩者核心差異在於連線管理與安全性模型。務必正確設定 ANSI 選項與 MSDTC,否則將遭遇最常見的兩大阻礙。