【问题标题】:SSIS, YYYYMMDD date format, from flat file to SQLServer 2008R2 table (OLE DB Destination)SSIS,YYYYMMDD 日期格式,从平面文件到 SQLServer 2008R2 表(OLE DB 目标)
【发布时间】:2013-06-04 10:45:16
【问题描述】:

有一个带有YYYYMMDD 格式日期的平面文件,例如19990131。我正在使用平面文件源读取它,列具有默认设置(DT_STR,宽度50)...当我尝试通过 OLE DB Destination 将数据插入到具有日期列的表中时,出现错误:“由于潜在的数据丢失,无法转换值。”。

这是什么原因? SQLServer 轻松理解 YYYYMMDD 格式...

【问题讨论】:

    标签: ssis sql-server-2008-r2


    【解决方案1】:

    SQL Server 可能理解它,但 SSIS 不理解。请注意来自 SSIS documentation 的这条评论:

    当字符串被转换为 DT_DATE 时,或反之亦然, 使用了变换。但是,日期是 ISO 格式的 YYYY-MM-DD,无论区域设置首选项是否使用 ISO 格式。

    SSIS 正在尝试根据平面文件连接器的语言环境解释YYYYMMDD,这可能适用于某些语言环境,但显然不适用于您的语言环境。正如您所发现的,将其更改为 YYYY-MM-DD 有效,因为 SSIS 认为该格式是明确的(当然,您也可以更改平面文件连接器的区域设置,尽管这可能会影响其他数据)。

    不幸的是,这种行为与 SQL Server 本身完全相反,至少对于 datetime data typeYYYYMMDD 是明确的,YYYY-MM-DD 是模糊的。另一方面,对于较新的 date data typeYYYYMMDDYYYY-MM-DD 在 SQL Server 中都是明确的。

    【讨论】:

    • 正是我想看到的那种解释(SSIS 和 SQL Server 之间的差异令人困惑)。谢谢!
    【解决方案2】:

    如果我在将数据放入表之前将YYYYMMDD 更改为YYYY-MM-DD,一切正常。如果没有人给出另一个更好的解决方案,我会接受这个作为答案。也许我的容易出现本地化错误?

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 2019-03-14
      • 2016-05-23
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多