关于sql server:如何在平面文件目标中使SSIS截断数字字段

How to make SSIS truncate numeric field in Flat File Destination

我想要一些关于在ssis中处理截断问题的建议。我在一张表中有一列col1,它是MONEY。我想把它输出到一个文本文件中(固定宽度,右边参差不齐)。在输出文件中,包含col1的列必须只有8个字符宽。

在OLEDB数据源中,col1被指定为:
"外部列"和"输出列"选项卡中的currency [DT_CY]

在平面文件连接管理器的"高级"选项卡中,col1被指定为:
currency [DT_CY]InputColumnWidth设为8。

如果我用123456789.00填充col1并执行任务,则OLEDB源将成功并将行传递到目标,但任务失败的原因是:

Error: 0xC02020A1 at DFT_Test, FFDEST_Test [3955]: Data conversion
failed. The data conversion for column"Col1" returned status value 4
and status text"Text was truncated or one or more characters had no
match in the target code page.".

Error: 0xC02020A0 at DFT_Test,
FFDEST_Test [3955]: Cannot copy or convert flat file data for column
"Col1".

我想避免这些截断错误。在源的错误输出中,我将col1的truncation属性从fail组件更改为ignore failure。我本以为这样可以解决问题,但执行任务仍然会产生相同的错误。

有人能就如何使ssis简单地将列截断为8个字符给出一些指导吗?


使用Derived Column任务创建一个8字符字符串的列,并从money列填充该列。然后在目的地组件中,将Derived Column映射到col1目的地,而不是原始列。

或者,更好的是,在源组件中,使用将money列转换为varchar(8)或char(8)列的SQL查询。