我有一个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
有没有人有过这个问题的经验,可以就解决问题提出一些建议吗?
答案 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。
这对我有用。在我的情况下,我不能使用忽略失败选项。因为如果我这样做,我将丢失数千行数据。