4

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

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

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

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

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

我还想指出,以前这是使用带有 openquery 的链接服务器完成的,并且没有任何问题。但是,由于性能问题,我们正试图远离链接服务器。

更新:

我设法使用 SQL ServerBCP out和 MySQL完成了所需的行为,LOAD DATA INFILE但知道如何使用 SSIS 数据流完成这一点仍然很好,因为它绝对是更简单的方法,并且应该更快,因为它在内存中运行。

4

2 回答 2

2

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

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

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

于 2014-09-23T21:16:13.930 回答
2

我通过更改任务属性中的 ODBC 目标解决了这个问题。我InsertMethod从切换BatchRow by Row

于 2016-03-29T16:10:06.343 回答