企業異構環境常需在 SQL Server 直接查詢 Sybase 資料。本文詳述從 Sybase Client 安裝、ODBC DSN 建立、Linked Server 設定,到查詢語法與常見錯誤排解的完整步驟,適用於 SQL Server 2008 至 2022 所有版本。
SQL Server → OLE DB Provider for ODBC → Sybase ODBC Driver → Sybase Server
dsedit.exe(通常在 %SYBASE%\ini\)SYB_PROD)IP,Port(例:132.228.1.70,4300)odbcad32.exe(系統管理工具 → ODBC 資料來源 64-bit)SYB_PROD(建議與 Server Object 同名)USE [master];
GO
EXEC sp_addlinkedserver
@server = N'SYBASE_LINK', -- Linked Server 名稱
@srvproduct = N'Sybase',
@provider = N'MSDASQL', -- OLE DB Provider for ODBC
@datasrc = N'SYB_PROD'; -- 系統 DSN 名稱
GO
-- 安全性對應:本地 sa 映射至遠端 sybase_user
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'SYBASE_LINK',
@useself = N'FALSE',
@locallogin = N'sa',
@rmtuser = N'sybase_user',
@rmtpassword = N'StrongPassword123';
GO
或使用 SSMS 圖形介面:
伺服器物件 → 連結伺服器 → 新增連結伺服器,依上述參數填寫。
SELECT * FROM SYBASE_LINK.sybase_db.dbo.sybase_table;
連結伺服器 "SYBASE_LINK" 的 OLE DB 提供者 "MSDASQL" 為資料行提供的中繼資料不一致。
MSDASQL 在嘗試推導遠端資料行型別時,與 Sybase ODBC 驅動程式回傳的中繼資料不符(常見於 datetime、numeric、長字串等型別)。
SELECT *
FROM OPENQUERY(SYBASE_LINK, 'SELECT col1, col2, col3 FROM sybase_db.dbo.sybase_table');
優點:
CONVERT、IFNULL)sp_executesql 動態建構 OPENQUERY 字串,防止注入SSIS、PolyBase (SQL 2019+) 或第三方 CDC 工具進行資料同步,而非即時跨庫查詢Linked Server + MSDASQL + Sybase ODBC 是經典但脆弱的組合。關鍵在於:用 OPENQUERY 繞過中繼資料協商,並在 64 位元環境全鏈路對齊驅動程式版本。若頻繁跨庫查詢,建議改為 ETL/ELT 架構將資料落地至 SQL Server,降低耦合與故障域。