由于日期列,SSIS(2008R2)从mssql导入到mysql失败

时间:2011-10-12 09:47:19

标签: mysql ssis odbc

我有一个oledb连接到mssql和一个ado.net目的地(使用了odbc驱动程序)到mysql。这些表格完全相同,所有列都在工作栏中。

收到的错误讯息是: [ADO NET Destination [325]]错误:数据插入期间发生异常,从提供程序返回的消息是:无法将类型为“System.DateTime”的对象强制转换为“System.Char []”。

我在其他数据类型上看到了类似的问题,但更改为字符串的解决方案在这里不起作用。如果我转换为字符串(必须长度为29,否则转换步骤失败)我收到以下错误消息:

[ADO NET目标[325]]错误:数据插入期间发生异常,提供程序返回的消息为:ERROR [HY000] [MySQL] [ODBC 5.1驱动程序] [mysqld-5.5.15]日期时间不正确值:'2011-03-21 11:23:48.573000000'用于第1行的'LastModificationDate'列

其他可能相关的细节: 连接驱动程序 - {MySQL ODBC 5.1 Driver} 脚本在数据流之前运行 - 设置sql_mode ='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 其他日期时间列正在运行 此列具有相当高的空值比例 mssql规范:[LastModificationDate] [datetime] NULL mysql规范:LastModificationDate datetime NULL

有没有人有过这个问题的经验,可以就解决问题提出一些建议吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用以下命令将其转换为查询中sql server端的字符串:

convert(char(10),LastModificationDate,111)+' '+convert(char(8),LastModificationDate,108)

这一直对我有用。

答案 1 :(得分:2)

本周我头痛得厉害。我尝试了很多方法。感谢上帝,最后,其中一人工作。希望它可以帮助你一点点。

对于数据类型为Int,datetime,decimal ....的一些列,在这里,我将其标识为ColumnA,并将其用作日期时间类型。

1.在数据流源中,使用SQL命令检索数据。像selectAnull(ColumnA,'1800-01-01')一样,作为ColumnA,C1,C2,......来自Table的Cn 确保对所有具有前面提到的数据类型的列使用Isnull函数。

2.执行SSIS pkg。它应该工作。

3.返回Control Flow,在数据流任务下,添加SQL Task控件以替换数据。我的意思是,将ColumnA从'1800-01-01'更新为null。

这对我有用。在我的情况下,我不能使用忽略失败选项。因为如果我这样做,我将丢失数千行数据。

相关问题