首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2008 透過連結伺服器操作 MySQL 完整教學

     編輯:關於SqlServer

環境準備

  • SQL Server 2008 (64 位元建議)
  • MySQL 5.1+
  • MySQL ODBC Driver 5.1 (需與 SQL Server 位元數一致,64 位元 OS 必裝 64 位元驅動程式)
  • 測試資料庫:test,資料表:testtable (id, name, age)

建立連結伺服器:圖形化介面

  1. SSMS 物件總管 → 伺服器物件 → 連結伺服器 → 右鍵 新增連結伺服器。
  2. 一般 頁籤:
    • 連結伺服器名稱:MySQLLink (自訂)
    • 伺服器類型:其他資料來源
    • 提供者:Microsoft OLE DB Provider for ODBC Drivers
    • 產品名稱:MySQL (任意字串)
    • 提供者字串:Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=test;User=root;Password=root;Option=3;
  3. 安全性 頁籤:選擇「使用這個安全性內容建立」,輸入 MySQL 登入帳密。

建立連結伺服器:T-SQL 腳本 (推薦納入版控)

EXEC master.dbo.sp_addlinkedserver
    @server = N'MySQLLink',
    @srvproduct = N'MySQL',
    @provider = N'MSDASQL',
    @provstr = N'Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=test;Uid=root;Pwd=root;Option=3;';

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = N'MySQLLink',
    @useself = N'False',
    @locallogin = NULL,  -- NULL 表示所有本地登入對應同一遠端帳號
    @rmtuser = N'root',
    @rmtpassword = N'root';

操作 MySQL 資料:OPENQUERY 函數

OPENQUERY 接受連結伺服器名稱與在遠端執行的 SQL 陳述式,支援查詢、插入、更新、刪除:

查詢

SELECT * FROM OPENQUERY(MySQLLink, 'SELECT id, name, age FROM testtable');

插入

INSERT INTO OPENQUERY(MySQLLink, 'SELECT id, name, age FROM testtable')
VALUES (1, N'Peter', 30);

更新

UPDATE OPENQUERY(MySQLLink, 'SELECT id, name, age FROM testtable')
SET name = N'Jone' WHERE id = 1;

刪除

DELETE FROM OPENQUERY(MySQLLink, 'SELECT id, name, age FROM testtable')
WHERE id = 1;

進階用法與注意事項

  • 四部分命名:若連結伺服器設定正確,亦可嘗試 SELECT * FROM MySQLLink...test.testtable,但 OPENQUERY 效能通常更佳(遠端執行完整查詢,僅傳回結果集)。
  • 參數化查詢:搭配 sp_executesql 避免注入,動態建構 OPENQUERY 字串。
  • 分散式交易:跨 SQL Server/MySQL 交易需啟用 MSDTC,MySQL 需使用 InnoDB 引擎支援 XA 交易,配置複雜,建議改用應用層補償邏輯。
  • 效能優化:遠端查詢盡量下推篩選條件,避免拉回大量資料在本地聯結。必要時在 MySQL 建立對應索引。
  • 字元集:MySQL 使用 utf8mb4,SQL Server 使用 Unicode (nvarchar),透過 ODBC 驅動通常自動轉碼,但需留意補充字元處理。

常見錯誤排查

錯誤現象可能原因解決方向
找不到提供者未安裝或位元數不符的 ODBC 驅動安裝對應版本 MySQL ODBC Driver
登入失敗帳密錯誤、MySQL 未授權遠端連線GRANT ALL ON test.* TO 'root'@'%'; FLUSH PRIVILEGES;
查詢中文亂碼字元集不匹配連線字串加入 CharSet=utf8mb4,確認資料表/欄位定義
大量資料插入緩慢逐筆 INSERT改用批次 INSERT 或 SSIS/BCP 匯入

總結

透過 MSDASQL + MySQL ODBC Driver 建立連結伺服器,配合 OPENQUERY 即可在 SQL Server 內以 T-SQL 直接操作 MySQL,實現異構資料庫整合查詢、ETL 搬移、報表聯查等需求。關鍵在於驅動程式版本一致、權限正確、善用遠端下推優化效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved