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

SSIS 寫入 MySQL 資料庫:ADO.NET 相容性問題與 ODBC 解決方案

     編輯:MySQL 綜合教學

SSIS 寫入 MySQL 資料庫:ADO.NET 相容性問題與 ODBC 解決方案

問題背景

早期 SSIS (SQL Server Integration Services) 的 ADO.NET Destination 可直接寫入 MySQL,但 2008 CTP 後版本變更導致不相容。官方已登記 Bug,暫時可用 ODBC 連接器繞過。

核心衝突:ANSI_QUOTES SQL_MODE

ADO.NET Destination 要求 MySQL 啟用 ANSI_QUOTES 模式(雙引號作為識別符引用),否則生成的 SQL 語法錯誤。

解決方案:ODBC 連接器 + Session 級 SQL_MODE 設定

  1. 建立使用 ODBC Driver 的 ADO.NET Connection Manager。
  2. 將 Connection Manager 的 RetainSameConnection 設為 True(確保同一 Session)。
  3. 在 Data Flow 前加入 Execute SQL Task,執行:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES';
  1. 確保 Execute SQL Task 與 ADO.NET Destination 使用同一個 Connection Manager。

為何不建議使用 MySQL .NET Connector

該驅動存在 ParameterMarkerFormat 問題:批次插入時生成的 SQL 參數標記為 p1, p2... 而非實際值,導致語法錯誤:

Error: 0xC020844B
Description: An exception has occurred during data insertion...
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"name", "date", "type", "remark") VALUES (p1, p2, p3, p4), (p1,p2,p3,p4)...

官方決定不修復此 Bug。替代方案:

  • DevArt dotConnect for MySQL(商業驅動,據稱無此問題)。
  • ODBC Driver + 上述 Workaround(免費、穩定)。

總結步驟

  1. 安裝 MySQL ODBC Driver (Unicode 版)。
  2. SSIS 專案建立 ODBC 連線,RetainSameConnection = True。
  3. Data Flow 前置 Execute SQL Task 設定 ANSI_QUOTES。
  4. ADO.NET Destination 正常映射欄位執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved