有一个YYYYMMDD
格式为日期的平面文件,例如19990131
. 我正在使用平面文件源读取它,列具有默认设置(DT_STR
,宽度50
)...当我尝试通过 OLE DB 目标将数据插入到具有日期列的表中时,我收到错误:“无法转换值,因为潜在的数据丢失。”。
它的原因是什么?SQLServer 很容易理解 YYYYMMDD 格式...
有一个YYYYMMDD
格式为日期的平面文件,例如19990131
. 我正在使用平面文件源读取它,列具有默认设置(DT_STR
,宽度50
)...当我尝试通过 OLE DB 目标将数据插入到具有日期列的表中时,我收到错误:“无法转换值,因为潜在的数据丢失。”。
它的原因是什么?SQLServer 很容易理解 YYYYMMDD 格式...
SQL Server 可能理解它,但 SSIS 不理解。请注意 SSIS文档中的此评论:
当字符串转换为 DT_DATE 时,或反之亦然,将使用转换的语言环境。但是,日期采用 YYYY-MM-DD 的 ISO 格式,无论区域设置首选项是否使用 ISO 格式。
SSIS 正在尝试YYYYMMDD
根据平面文件连接器的语言环境进行解释,这可能适用于某些语言环境,但显然不适用于您的语言环境。正如您所发现的,将其更改为YYYY-MM-DD
有效,因为 SSIS 认为该格式是明确的(当然,您也可以更改平面文件连接器的区域设置,尽管这可能会影响其他数据)。
不幸的是,这种行为在 SQL Server 本身中是完全相反的,至少对于datetime
数据类型:YYYYMMDD
是明确且不YYYY-MM-DD
明确的。另一方面,对于较新的date
数据类型,两者在 SQL Server 中都是明确的YYYYMMDD
。YYYY-MM-DD
如果我在将数据放入表之前更改YYYYMMDD
为一切正常。YYYY-MM-DD
如果没有人给出另一个更好的解决方案,我会接受这个作为答案。也许我的容易出现本地化错误?