將異構數據源(Oracle、其他 SQL Server、ODBC/OLE DB 源)註冊為本地服務器的「鏈接服務器」,實現透明的跨實例查詢與數據移動,無需應用層雙連接協調。
| 目標類型 | 查詢語法 | 關鍵差異 | 示例 |
|---|---|---|---|
| Oracle (OLE DB Provider) | SELECT * FROM OPENQUERY('LinkedName', 'SQL') | 需指定 Schema(用戶),Oracle 區分大小寫,雙引號保留 | OPENQUERY('ORA_DW', 'SELECT * FROM "SCOTT"."EMP" WHERE DEPTNO=10') |
| SQL Server (Native) | SELECT * FROM LinkedName.DBName.Schema.Table | 四部分命名,自動類型映射,支持 DML 直寫 | SELECT * FROM SQL_PROD.DW.dbo.FactSales |
INSERT INTO LocalDB.dbo.StagingTable (Col1, Col2)
SELECT Col1, Col2 FROM LinkedSQL.DW.dbo.SourceTable
WHERE LoadDate >= DATEADD(day, -1, GETDATE());
UPDATE LinkedSQL.DW.dbo.DimCustomer
SET IsActive = 0
WHERE CustomerKey IN (SELECT CustomerKey FROM LocalDB.dbo.InactiveList);
OPENQUERY 僅支持 SELECT。寫入 Oracle 需:
EXEC('CALL pkg.upsert(?,?)') AT ORA_DW。OraOLEDB.Oracle(官方),避免 MSDAORA (微軟舊版) 性能/功能缺陷。sp_serveroption 'LinkedName', 'rpc out', 'true'。sp_serveroption 'LinkedName', 'use remote collation', 'true' 避免字符串比較衝突。OPENQUERY 下推過濾邏輯到遠程執行;或遠程創建視圖/存儲過程預聚合,本地僅拉取結果集。