【发布时间】:2013-06-04 10:45:16
【问题描述】:
有一个带有YYYYMMDD 格式日期的平面文件,例如19990131。我正在使用平面文件源读取它,列具有默认设置(DT_STR,宽度50)...当我尝试通过 OLE DB Destination 将数据插入到具有日期列的表中时,出现错误:“由于潜在的数据丢失,无法转换值。”。
这是什么原因? SQLServer 轻松理解 YYYYMMDD 格式...
【问题讨论】:
有一个带有YYYYMMDD 格式日期的平面文件,例如19990131。我正在使用平面文件源读取它,列具有默认设置(DT_STR,宽度50)...当我尝试通过 OLE DB Destination 将数据插入到具有日期列的表中时,出现错误:“由于潜在的数据丢失,无法转换值。”。
这是什么原因? SQLServer 轻松理解 YYYYMMDD 格式...
【问题讨论】:
SQL Server 可能理解它,但 SSIS 不理解。请注意来自 SSIS documentation 的这条评论:
当字符串被转换为 DT_DATE 时,或反之亦然, 使用了变换。但是,日期是 ISO 格式的 YYYY-MM-DD,无论区域设置首选项是否使用 ISO 格式。
SSIS 正在尝试根据平面文件连接器的语言环境解释YYYYMMDD,这可能适用于某些语言环境,但显然不适用于您的语言环境。正如您所发现的,将其更改为 YYYY-MM-DD 有效,因为 SSIS 认为该格式是明确的(当然,您也可以更改平面文件连接器的区域设置,尽管这可能会影响其他数据)。
不幸的是,这种行为与 SQL Server 本身完全相反,至少对于 datetime data type:YYYYMMDD 是明确的,YYYY-MM-DD 是模糊的。另一方面,对于较新的 date data type,YYYYMMDD 和 YYYY-MM-DD 在 SQL Server 中都是明确的。
【讨论】:
如果我在将数据放入表之前将YYYYMMDD 更改为YYYY-MM-DD,一切正常。如果没有人给出另一个更好的解决方案,我会接受这个作为答案。也许我的容易出现本地化错误?
【讨论】: