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

如何在SSIS中精准读取十进制数据并加载至SQL Server表?

解决SSIS中Excel数据精准导入SQL Server decimal列的问题

你的疑问解答

  1. 修改Excel数据源高级编辑器输入列类型为DT_DECIMAL后预览重置是正常现象。Excel驱动会自动扫描单元格数据并推断类型,输入列的类型是基于外部列的推断结果生成的,单独修改输入列会被驱动的自动推断覆盖,无法持久生效。
  2. 修改外部列类型为DT_DECIMAL也无法解决问题。Excel OLEDB驱动的类型推断逻辑优先级很高,即使手动修改外部列类型,重新连接或预览数据时,驱动仍会根据单元格数据重新推断类型并覆盖你的设置。
  3. 添加数据转换任务并非“为时已晚”,这反而在SSIS里是处理类型转换的常规操作。但要注意,必须先确保Excel数据源读取时不会丢失小数精度,再通过转换任务转成目标类型。

正确的精准读取与加载步骤

  • 调整Excel连接字符串,强制驱动按高精度方式读取数据
    在Excel连接管理器的属性窗口中,找到Extended Properties,修改为:
    Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text
    
    其中:
    • TypeGuessRows=0:让驱动扫描所有行推断类型(默认只扫前8行,容易误判小数为浮点)
    • IMEX=1:强制将混合类型的单元格按文本读取,避免驱动把小数当成FLOAT
    • ImportMixedTypes=Text:进一步确保混合类型列按文本导入,保留完整精度
  • 配置Excel数据源
    打开Excel数据源的高级编辑器,将目标小数列的外部列和输入列都设置为DT_WSTR(字符串类型),避免驱动自动转成FLOAT。
  • 添加数据转换任务
    在数据流中插入数据转换任务,将刚才的DT_WSTR类型列转换为DT_DECIMAL,并设置精度为16、小数位为2。
  • 配置OLE DB目标
    将转换后的DT_DECIMAL(16,2)列映射到SQL Server目标表的decimal(16,2)列。如果是新建表,手动指定列类型为decimal(16,2),不要使用SSIS自动生成的表结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:16:04