You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制SSIS输出平面文件时使用数值类型而非双精度浮点数?

解决SSIS平面文件目标数值字段无前置零及小数格式异常问题

问题核心

输入列是精度5、小数位2的DT_NUMERIC,但平面文件目标的外部列自动变为DT_R8,导致0输出.00、0.17输出.17,无法满足保留两位小数且带前置零的要求。


方案一:强制外部列使用DT_NUMERIC类型(解决自动恢复问题)

平面文件连接管理器的自动类型推断是导致外部列类型重置的关键,需从连接管理器层面修改设置:

  • 打开对应的平面文件连接管理器,切换到「高级」选项卡
  • 找到目标数值列,将数据类型改为DT_NUMERIC,同时设置精度为5、小数位数为2
  • 切换到「常规」选项卡,取消勾选重新检查列(若存在该选项),防止包加载时自动推断类型覆盖手动配置
  • 保存连接管理器设置后,回到平面文件目标组件,确认外部列类型已同步为DT_NUMERIC

方案二:通过派生列组件格式化数值为字符串(最可靠的格式控制)

若类型强制仍无效,可将数值转换为指定格式的字符串后输出:

  • 在数据流任务中,在数据源与平面文件目标之间添加派生列组件
  • 针对目标数值列(假设列名为TargetColumn),添加派生列,使用以下表达式之一:
    • 兼容旧版SSIS的表达式(无需依赖FORMAT函数):
      (DT_WSTR,10)(ROUND(TargetColumn,2)) == ".00" ? "0.00" : 
      (LEFT((DT_WSTR,10)(ROUND(TargetColumn,2)),1) == "." ? "0" + (DT_WSTR,10)(ROUND(TargetColumn,2)) : 
      (DT_WSTR,10)(ROUND(TargetColumn,2)))
      
    • SQL Server 2012及以后版本可使用更简洁的FORMAT函数:
      FORMAT(TargetColumn, "##0.00", "en-US")
      
  • 将派生的字符串列映射到平面文件目标的对应外部列,设置外部列数据类型为DT_WSTR,长度设为10(足够容纳5位精度+两位小数的格式)
  • 此方法可确保输出严格遵循##0.00格式,彻底解决前置零缺失问题

方案三:设置平面文件列的格式属性

部分SSIS版本支持直接为DT_NUMERIC类型的外部列设置格式:

  • 在平面文件连接管理器的「高级」选项卡中,选中目标列
  • 在属性窗口中找到格式(Format)属性,设置为0.00
  • 保存设置后,平面文件目标会按指定格式输出数值,自动补全前置零

内容的提问来源于stack exchange,提问作者Simon Elms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:47:11