Oracle到SQL2005 DATETIME字段在SSIS中溢出

时间:2011-01-05 23:31:40

标签: sql-server-2005 oracle datetime ssis

我正在使用SSIS将数据从Oracle导入SQL Server 2005。我认为Oracle中的datetime字段存储的精度高于SQL Server 2005“DATETIME”字段允许的精度,从而导致溢出错误。获取表格的最佳做法是什么?

这些表有很多日期时间字段,并且有很多表,所以如果每个字段都没有大量的手工工作,那就太棒了......

我已经阅读了https://stackoverflow.com/questions/2231028/dealing-with-timestamp-datetime-when-copying-data-from-oracle-to-sql-server-using,这可能会奏效,但我必须为每个字段,每个表格都这样做,而我宁愿拥有通用设置或流程...

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

这个问题是SQL Server的日期有效(1753年1月1日,9999年12月31日),而Oracle的日期是公元前4712年1月1日到9999年12月31日。所以任何日期都在Oracle不到1753年1月1日将溢出datetime sql server数据类型。

如果你升级到Sql 2008,你可以使用Datetime2类型来帮助解决这个问题,因为它的有效日期是0001-01-01到9999-12-31。

请在此处查看详细信息:Sql Server Date and Time types

在这里:Oracle Date Type

答案 1 :(得分:3)

我建议在SELECT语句中使用以下指令:

CASE WHEN date_birth < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL
ELSE to_char(date_birth, 'YYYY-MM-DD HH24:MI:SS') END AS date_birth

答案 2 :(得分:2)

还有另一个原因。检查以确保日期有效。我们正处于这个阶段,我们已经指定了像5096这样的东西,显然无法移动到SQL服务器......如果您有一年的0207而不是2007年,那就相同。

答案 3 :(得分:0)

将此标记为“已回答”,因为似乎没有全局设置。