1

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

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

4

2 回答 2

4

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 中都是明确的YYYYMMDDYYYY-MM-DD

于 2013-06-04T19:14:39.400 回答
0

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

于 2013-06-04T13:29:18.677 回答