在企業級應用開發中,跨伺服器查詢資料是常見需求。SQL Server 提供的 Linked Server(連結伺服器)功能,讓我們能在本地實例直接存取遠端 SQL Server、MySQL、Oracle 等異構資料來源。本文將以實戰範例,詳細說明如何快速建立 DB Link 並進行跨伺服器查詢。
使用系統預存程序 sp_addlinkedserver 與 sp_addlinkedsrvlogin 即可完成設定。以下範例將名為 WAS_SMS 的遠端 SQL Server 登記為連結伺服器:
-- 1. 建立連結伺服器定義
EXEC sp_addlinkedserver
@server = 'WAS_SMS', -- 本地要使用的連結伺服器名稱
@srvproduct = '', -- 產品名稱(SQL Server 可留空)
@provider = 'SQLOLEDB', -- OLE DB 提供者
@datasrc = '10.131.20.100'; -- 遠端伺服器 IP 或主機名
-- 2. 設定登入對應(使用遠端固定帳號密碼)
EXEC sp_addlinkedsrvlogin
'WAS_SMS',
'false', -- 不使用本地登入認證
NULL, -- 本地登入(NULL 表示所有登入)
'CustomSMS', -- 遠端登入帳號
'SqlGdn@InfoxMas2008'; -- 遠端登入密碼
-- 3. 測試跨伺服器查詢(四段式命名:連結伺服器.資料庫.結構描述.資料表)
SELECT TOP 100 *
FROM WAS_SMS.AS400_Extract.DBO.ORDUNA;
連結 MySQL 需先在 Windows「系統 DSN」建立 ODBC 資料來源(範例名為 MY_TOMATO),再以 MSDASQL 提供者建立連結:
-- 1. 建立連結伺服器指向系統 DSN
EXEC sp_addlinkedserver
@server = 'mysqltest',
@srvproduct = 'mysql',
@provider = 'msdasql', -- ODBC 橋接提供者
@datasrc = 'MY_TOMATO'; -- 系統 DSN 名稱
-- 2. 設定 MySQL 專用登入認證
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'mysqltest',
@useself = 'false',
@locallogin = '本地資料庫登入使用者', -- 對應的本地登入
@rmtuser = 'MySQL使用者名稱',
@rmtpassword = 'MySQL使用者密碼';
-- 3. 使用 OPENQUERY 執行 Pass-through 查詢(效能較四段式命名佳)
SELECT *
FROM OPENQUERY(mysqltest, 'SELECT * FROM marketing_data');
OPENQUERY 或 EXECUTE AT,將運算下推至遠端伺服器,減少網路傳輸。掌握 Linked Server 設定,即可打破資料孤島,實現異構資料庫的無縫整合,大幅簡化 ETL 與報表開發流程。