SSIS导出SQL Server数据到CSV时保留两位小数的问题求助
SSIS导出CSV保留Decimal类型两位小数的解决方法
以下是几个可靠的解决思路,按实操优先级排序:
1. 数据源SQL查询直接格式化(最简便)
修改OLE DB Source的查询语句,将decimal列转换为固定两位小数的字符串后再导出,从源头确保格式正确:
- 使用
FORMAT函数(SQL Server 2012及以上支持):SELECT 列1, 列2, FORMAT(你的Decimal列, 'N2') AS 格式化列名 FROM 目标表 - 若担心区域设置影响(比如部分环境下
FORMAT会输出逗号作为千分位),改用STR函数:
其中SELECT 列1, 列2, STR(你的Decimal列, 15, 2) AS 格式化列名 FROM 目标表15是列的总长度(按需调整,确保能容纳整数部分+小数点+两位小数),2是固定保留的小数位数。
之后在Flat File Destination中,将该列配置为字符串类型(DT_STR或DT_WSTR)即可。
2. 数据流中添加派生列转换
如果不想修改源查询,可在数据流任务中插入派生列组件,通过SSIS表达式将decimal列转为固定格式的字符串:
- 新增派生列,使用如下表达式(替换
你的Decimal列为实际列名):
该表达式同时处理了空值场景,确保空值也输出ISNULL(你的Decimal列) ? "0.00" : STR(你的Decimal列, 15, 2)0.00。 - 将派生列的输出连接到Flat File Destination,并把对应的目标列设置为字符串类型。
3. 调整Flat File连接管理器配置(需配合类型转换)
单纯修改Flat File连接的小数位数设置无效,因为数值类型写入CSV时会自动省略末尾零,必须先转为字符串:
- 打开Flat File连接管理器的高级选项卡
- 找到目标decimal列,将数据类型改为
DT_STR(或DT_WSTR),设置足够的输出宽度 - 确保数据流中该列已被转换为字符串类型(通过上述两种方法之一),再写入目标文件
内容的提问来源于stack exchange,提问作者Vanshika Sharma
相关产品推荐
相关产品推荐

