【问题标题】:Migration of Data from Oracle database to SQL Server将数据从 Oracle 数据库迁移到 SQL Server
【发布时间】:2018-08-01 01:47:48
【问题描述】:

[ADO NET Destination [2]] 错误:数据插入过程中发生异常,提供程序返回的消息是:SqlDateTime 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。

我不明白来自 SSIS 的错误消息。请我需要帮助。 谢谢

【问题讨论】:

  • 大声朗读给自己听。这是非常明确的。

标签: sql-server-2008 ssis database-migration


【解决方案1】:

在C#中,当数据从NULL转换为DateTime时,DataTime.MinValue = 0001-01-01,但是在数据库中,最小值是1/1/1753,所以你必须对@做一些处理987654324@,否则在插入0001-01-01(由NULL转换而来)时,会抛出该错误。

【讨论】:

    【解决方案2】:

    这可能是双方日期格式不同的问题,可能是两个数据库的不同语言设置。例如,Oracle 使用 dd-MM-yyyy 而 SQL 需要 MM-dd-yyyy。尝试从两个数据库中选择日期时间字段以检查格式。然后尝试通过 SSIS 中的某种类型的转换来解决它。您可以尝试将 Oracle 日期转换为通用日期时间格式,然后再转换回 MS SQL 日期格式。当然,SSIS 应该自动解决它,但是处理日期通常是错误的和令人困惑的。

    另一种可能性是,您正在尝试将 Oracle 中的 TEXT 列转换为 MSSQL 中的日期时间列,并且表中的一个值不符合预期的日期格式。

    【讨论】:

    • Oracle 的日期数据类型没有任何格式 - 它在内部存储为 7 字节。只有将其转换为字符串时才会应用格式,并且 Oracle 可以使用任何格式进行此转换 - 默认日期格式是会话参数(这意味着任何用户都可以更改他们自己的会话默认格式,因此两个用户可以有不同的默认值),初始默认值也取决于数据库的区域和语言设置。这个答案做了很多假设,其中大部分似乎都不成立,因为不需要将日期转换为字符串。
    • @MT0,当然,日期在内部存储为一些字节 (7)。将日期从 Oracle 迁移到 Oracle 非常简单,只需将 7 个字节从一个地方复制到另一个地方,我同意你的看法。但是这个问题是关于在 Oracle 和 MSSQL 之间迁移的。在这样的扫描中,您不能简单地将几个字节从 MSSQL 移动到 Oracle 而不解释内容,内部结构是不同的。在某些时候必须发生从 MSSQL 内部结构到 Oracle 结构的转换。
    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多