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

Posted

技术标签:

【中文标题】无法使用 SSIS 将 SQL Server varchar(max) 传输到 MySQL 文本【英文标题】:Unable to transfer SQL Server varchar(max) to MySQL text using SSIS 【发布时间】:2014-11-10 14:14:52 【问题描述】:

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

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

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

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

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

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

更新:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于无法使用 SSIS 将 SQL Server varchar(max) 传输到 MySQL 文本的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2008中使用SSIS从一个数据库导入数据到另一个数据库,[SQL Server 目标 [22]] 错误: 无法准备 S

如何将 SQL Server 2008 R2 SSIS 包升级到 SQL Server 2016?

如何使用 SSIS 将 OTM 中的数据提取到 SQL Server 中?

使用 SSIS 将具有多个表的单个 mdb 文件动态导入 SQL Server?

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

使用 SSIS 将数据加载到 SQL Server 中的多个表