无法使用SSIS将SQL Server varchar(max)传输到MySQL文本

时间:2014-09-16 17:51:13

标签: mysql sql-server ssis mysql-odbc-connector

我正在尝试使用SSIS将表从SQL Server传输到MySQL,并且它在SQL Server上的一个varchar(max)列和MySQL上的文本上失败。到目前为止,我已经尝试将此作为OLE DB到ODBC数据流,以及将BCP输出到ODBC数据流的平面文件中。相关字段在SSIS中配置为DT_TEXT。在这两种情况下,它都会产生以下错误:

  

[ODBC Destination [47]]错误:发生了打开数据库连接(ODBC)错误。       插入第1行时SQLExecute返回错误

     

[ODBC Destination [47]]错误:发生了打开数据库连接(ODBC)错误。       州:'HYC00'。本机错误代码:0。[MySQL] [ODBC 5.2(a)驱动程序] [mysqld-5.1.69-log]       不支持在执行时包含数据的参数数组

     

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。 ProcessInput       组件“ODBC Destination”(47)上的方法失败,错误代码为0x80004005       处理输入“ODBC目的地输入”(58)。已识别的组件返回了       ProcessInput方法的错误。该错误特定于组件,但是       错误是致命的,将导致数据流任务停止运行。可能有错误       在此之前发布的消息以及有关失败的更多信息。

当我选择忽略该列时,包的两个版本都运行正常。

我还要注意,之前这是使用带有openquery的链接服务器完成的,它没有任何问题。但是,由于性能问题,我们正在尝试远离链接服务器。

更新:

我设法使用SQL Server BCP out然后使用MySQL LOAD DATA INFILE来完成所需的行为,但知道如何使用SSIS数据流完成此操作仍然很好,因为它绝对是更简单的方法要做到这一点,应该更快,因为它在内存中运行。

2 个答案:

答案 0 :(得分:2)

确保源和目标中的文本编码相同,或者如果没有,则在SSIS中进行适当的转换。

以下文章可能会有所帮助,如果这是问题 - 它是朝着另一个方向(MySQL到SQL Server),但有一些关于两个数据库中使用的编码类型的有用信息,以及一些示例如何进行这种转换:

http://agilebi.com/ddarden/2010/09/19/extracting-mysql-utf-8-fields-with-ssis/

答案 1 :(得分:2)

我通过更改任务属性中的ODBC目标来解决此问题。我切换了InsertMethod from Batch to Row by Row.