Execute SQL Task映射Decimal变量丢失小数点问题求助
SSIS Execute SQL Task 小数丢失问题解决方案
检查源列与聚合结果的数据类型
确认Sales表中Amount列的数据类型是decimal/numeric而非整数类型(如int/bigint)。若列类型正确,可在SQL中显式指定聚合结果的精度,强制返回固定小数位的数值:SELECT CAST(SUM(Amount) AS decimal(18,2)) AS TotalSales FROM Sales WHERE Customer = ?避免SSIS自动推断数据类型时出现精度丢失。
精确匹配变量与结果集的类型配置
在Execute SQL Task的「结果集」选项卡中,严格匹配变量与结果列的类型:- 若SQL返回
decimal(18,2),将User::SalesAmount变量的类型设为decimal,并手动设置精度(Precision)为18、小数位数(Scale)为2,不要使用默认的decimal配置。 - 放弃使用
double类型,浮点数的二进制存储特性易导致精确数值的精度丢失,decimal是更适合财务类数值的类型。
- 若SQL返回
修正Script Task中的变量读取逻辑
在Script Task中读取变量时,必须使用对应的数据类型转换,禁止隐式转换:// C#示例:正确读取decimal变量 decimal salesAmount = (decimal)Dts.Variables["User::SalesAmount"].Value;若错误将变量值转为整数类型(如
int/long),会直接截断小数位,导致数值异常放大。调整连接管理器的转换设置
检查OLE DB连接管理器的属性,禁用「自动缩放数值」「保留整数精度」类的自动转换选项,部分驱动会默认对小数进行缩放处理,导致小数点丢失。
内容的提问来源于stack exchange,提问作者Tripanosomagambiense
相关产品推荐
相关产品推荐

