我正在尝试使用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数据流完成此操作仍然很好,因为它绝对是更简单的方法要做到这一点,应该更快,因为它在内存中运行。
答案 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
.