跨伺服器資料存取是分散式資料庫環境常見需求。SQL Server 提供多種技法,各有優缺點與適用場景。本文系統整理四大主流方法並實測比較。
SELECT * FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=TQDBSV001;User ID=fish;Password=2312' ).RackDB.dbo.CS
OPENROWSET ( 'provider_name', { 'datasource'; 'user_id'; 'password' | 'provider_string' }, { [catalog.][schema.]object | 'query' } )
SELECT * FROM [LinkedSvr].[Database].[Schema].[Table]SELECT * FROM OPENQUERY(LinkedSvr, 'SELECT * FROM db.dbo.table WHERE col = 1')
OPENQUERY 通常能繞過| 場景 | 推薦技法 |
|---|---|
| 臨時、一次性查詢 | OPENDATASOURCE / OPENROWSET |
| 固定、頻繁跨伺服器存取 | 連結伺服器 + OPENQUERY |
| 需分散式交易 | 連結伺服器(需 MSDTC) |
| 異構資料源(Oracle、DB2、MySQL) | 連結伺服器 + 適當 OLE DB/ODBC 提供者 |
| 大量資料遠端過濾後再傳輸 | OPENQUERY(下推謂詞) |
跨伺服器查詢無最佳唯一解,關鍵在於「連線管理集中化」與「查詢下推遠端執行」。企業環境建議以連結伺服器為基礎,搭配 OPENQUERY 實現最佳效能與維運體驗。