我有 12 列使用yyyymmdd格式。在数据流任务中,我有一个平面文件源、一个派生列任务和一个OLE DB 目标。我将以下表达式应用于派生列任务中的这些字段:
(DT_DBDATE)(SUBSTRING((DT_STR,10,1252)([Date_Column]),1,4) + "-"
+ SUBSTRING((DT_STR,10,1252)([Date_Column]),5,2) + "-"
+ SUBSTRING((DT_STR,10,1252)([Date_Column]),7,2))
它不断让我在子字符串之前转换字段,但我在Connection Manager中将字段设置为DT_STR。目标字段在 SQL Server中采用DATE格式。SSIS 总是显示“由于可能丢失数据而无法转换”错误。我检查了 CSV 中的原始数据,没有看到任何不合适的日期。一切都符合格式。
我也尝试使用这里建议的数据转换任务,但最终得到了同样的错误。有什么建议吗?我在这里看到的答案都指向使用派生列任务,但我提到的其他几个问题也遇到了同样的问题。
编辑:这是数据样本。所有错误中特别提到的字段是 CRTFCTN_DT。数据集中有 470 个字段,但这确实显示了前两个日期字段。
解决方案:在Connection Manager中,我将yyyymmdd字段更改为 DT_STR(10)(日期为 8 个字符,添加的破折号为 2 个字符),并重建了我的Data Flow Task。这解决了问题。如果您不重新构建任务,派生列任务将不会选择新的数据类型。重新创建任务后,我也不再需要在应用子字符串之前将日期转换为字符串。