【问题标题】:SSIS Data Flow overflowing on datesSSIS 数据流在日期溢出
【发布时间】:2010-12-02 02:54:33
【问题描述】:

我有一个 FoxPro 数据源,目标是 SQL Server 2008。

在 FoxPro 方面,我有一列具有 Date 数据类型。宽度为 8,最小值为 0001-01-01,最大值为 9999-12-31。在 SQL Server 端,我有一个datetime。宽度也为 8,最小值为 1753-01-01,最大值为 9999-12-31。

在我的 SSIS 数据流任务中,我有一个读取 FoxPro 表的 OLE DB 源组件。这些列在外部列和输出列中都映射为 DT_DBDate。 SQL Server 表的 OLE DB 目标采用该列并将其流向 DT_DBTIMESTAMP。我确信 DT_DBTIMESTAMP 可以充分处理这些日期范围,并且可以合理地确定 DT_DBDATE(但在 MS 文档中找不到它)。

问题

当我执行任务时,遇到 1900 年代初期的值时,我遇到了失败并抱怨“日期格式无效”和“转换失败,因为数据值溢出特定类型”的问题,到 2050 年以上的值。我不确定我哪里出错了。

奖金问题

如何处理数据流任务中的溢出?

【问题讨论】:

    标签: date ssis foxpro dataflow


    【解决方案1】:

    您可能想要执行一个简单的 VFP 查询来查找超出范围的记录,例如

    的 VFP 查询
    select * from yourtable
       where YourDate < date( 1753, 1, 1 )
          or YourDate > date( 9999, 12, 31 )
    

    查看这些记录是否有问题... 此外,请查看可能导致您的边界问题的其他列

    【讨论】:

    • 是的,我想我看错了。根据业务需求,使用查询来处理,比什么都合适。
    • +1。这为我解决了从 MS Access 导入的问题。在 Access 中,语法是 select * from yourtable where YourDate &lt; #01-01-1753# OR YourDate &gt; #01-01-9999#
    【解决方案2】:

    我认为您需要决定要如何处理您的数据

    如果要按原样加载,则需要更改字段数据类型,以便它能够保存数据。

    或者,如果您希望更正错误数据,则需要对其进行验证和转换。

    如果您愿意花一些钱,请考虑使用高级 ETL 处理器。

    它适用于文本、XML、Excel、Access、DBF、Foxpro、ODBC、OLE DB、MS Sql Server、Oracle、MySql、PostgreSQL、Firebird、Interbase、SQLite、POP3、SMTP、文件系统、FTP、SSL 和统一码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      相关资源
      最近更新 更多