SSIS 派生列计算问题



我在 SSIS 中的派生列计算未返回正确的值时遇到问题。为了提供一些背景知识,由于溢出问题(已解决),我不得不更改计算格式,请参阅此处 - SSIS - 派生列计算错误

现在,旧计算和新计算在 SSIS 中返回不同的值,即使它们在数学上相同,并且在 .net、excel 和 SQL 中执行时返回相同的值。

在 .Net 中 -

decimal test1 = Convert.ToDecimal((415 * 415 * 415) * 0.000000030940000);
decimal test2 = Convert.ToDecimal((0.000000030940000 * 415 * 415 * 415));       

都返回 2.2113862225

在 SSIS 中 -

test1 = ((415 * 415 * 415) * 0.000000030940000)
test2 = (0.000000030940000 * 415 * 415 * 415)

返回不同的值(test1 = 2.2113862225 和 test2 = 2.211535)

有趣的是,SSIS 将 test1 视为数字 (38,6),将 test2 视为数字 (27,15)。

以前有人遇到过这个问题吗?

我真的不想重构整个包来使用 .net 计算,但这将是我最后的解决方案。

如果其他人遇到此问题 - 我没有找到解决方案,但确实实施了解决方法 -

而不是在派生列中进行计算 -

  1. 使用派生列组件对变量进行处理并将其设置为 0
  2. 添加数据转换并将其切换到所需的数据类型(在本例中为 float)
  3. 添加 OLE DB 命令以调用存储过程来执行计算,输出参数填充在第 1 点创建的变量。

最新更新