有一个平面文件的日期为YYYYMMDD
格式,例如19990131
。我正在使用平面文件源读取它,列具有默认设置(DT_STR
,宽度50
)...当我尝试通过OLE DB目标将数据插入到具有Date列的表时,我得到了错误:“由于潜在的数据丢失,无法转换该值。”
它的原因是什么? SQLServer很容易理解YYYYMMDD格式......
答案 0 :(得分:4)
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中都是明确的。
答案 1 :(得分:0)
如果我在将数据放入表格之前将YYYYMMDD
更改为YYYY-MM-DD
,一切正常。如果没有人提供另一个更好的解决方案,我会接受这个答案。也许我的本地化错误很容易?