我想了解一些关于在SSIS中处理截断问题的建议。我在表格中有一列Col1,MONEY
。我想将其输出到文本文件(固定宽度,右边粗糙)。在输出文件中,保存Col1的列只能是8个字符宽。
在OLEDB数据源中,Col1指定为:
“外部列”和“输出列”选项卡中的currency [DT_CY]
。
在“平面文件连接管理器”的“高级”选项卡中,Col1指定为:
currency [DT_CY]
,InputColumnWidth
设为8。
如果我用123456789.00填充Col1并执行任务,OLEDB源会成功并将行传递到目标,但任务失败并显示:
错误:DFT_Test处的0xC02020A1,FFDEST_Test [3955]:数据转换 失败。列" Col1"的数据转换返回状态值4 和状态文本"文本被截断或一个或多个字符没有 匹配目标代码页。"。
错误:DFT_Test处的0xC02020A0, FFDEST_Test [3955]:无法复制或转换列的平面文件数据 " Col1中"
我想避免这些截断错误。在源的错误输出中,我将Col1的Truncation属性从Fail Component更改为Ignore Failure。我原以为这会解决问题,但执行任务仍然会产生同样的错误。
有人可以提供一些关于如何使SSIS简单地将列截断为8个字符的指导吗?
答案 0 :(得分:1)
使用Derived Column
任务创建一个8字符字符串的列,并从money
列填充该列。然后在目标组件中,将Derived Column
映射到Col1目标而不是原始列。
或者更好的是,在源组件中,使用将money列转换为varchar(8)或char(8)列的SQL查询。