SSIS,YYYYMMDD日期格式,从平面文件到SQLServer 2008R2表(OLE DB目标)

时间:2013-06-04 10:45:17

标签: ssis sql-server-2008-r2

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

它的原因是什么? SQLServer很容易理解YYYYMMDD格式......

2 个答案:

答案 0 :(得分:4)

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中都是明确的。

答案 1 :(得分:0)

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