【问题标题】:SSIS - Derived Column Calculation ErrorSSIS - 派生列计算错误
【发布时间】:2013-10-07 22:47:43
【问题描述】:

在 SSIS 的派生列中的计算存在一些问题。

我正在尝试执行以下计算 -

4206 + ((4206 * 4206) * 0.000150000000000) + ((4206 * 4206 * 4206) * 0.000000010000000)

我收到一个错误 -

**The magnitude of the result of a binary operation overflows the maximum size for result data type**

将此计算粘贴到我的 C# Web 应用程序会导致类似问题 -

**The operation overflows at compile time in checked mode** 

有人抱怨这个部分 - 4206 * 4206 * 4206。 也可以在 Web 应用程序中通过更改它来解决它4206 * 4206 * 4206L,但我不知道如何在 SSIS 包中解决这个问题。

以前有人遇到过这个问题吗?任何想法将不胜感激。

提前致谢。

编辑

溢出异常现已解决,但新旧计算返回的值略有不同,例如使用 415 作为输入值而不是 4206 -

旧计算值 = 419.014582 新计算值 = 419.042100

确切的计算是-

旧 - InputValue + ((InputValue * InputValue) * (DT_DECIMAL,20)@[User::SquaredValue]) + ((InputValue * InputValue * InputValue) * (DT_DECIMAL,20)@[User::CubicValue])

新 - InputValue + (((DT_DECIMAL,20)@[User::SquaredValue] * InputValue * InputValue)) + (((DT_DECIMAL,20)@[User::CubicValue] * InputValue * InputValue * InputValue))

编辑

关于计算中的细微差异的第二个问题作为一个新问题打开。

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

    为什么不直接改变

    ((4206 * 4206 * 4206) * 0.000000010000000)
    

    (0.000000010000000 * 4206 * 4206 * 4206)
    

    避免内部行计算中出现如此大的数字。我会用

    4206 + (0.00015 * 4206 * 4206) + (0.00000001 * 4206 * 4206 * 4206)
    

    【讨论】:

    • 嗯,经过进一步调查,这仍然不完全正确,错误已经消失,但新计算返回的值与旧计算略有不同......请参阅原始问题中的编辑。
    • @user1948635:结果的微小差异可能来自浮点不准确
    • 我已经把实际计算放在上面了(直接来自派生列组件),你能看出是什么原因造成的吗?当使用手动输入的数字而不是上面的变量运行时,计算匹配所以我认为它是一个演员。
    • 其实我最后的评论不太对,两次计算(即使写成 415 * ...)结果略有不同
    • @user1948635:顺便说一句,当对所有值使用十进制时,即使这样也可以:select 4206.0 + ((4206.0 * 4206.0) * 0.00015) + ((4206.0 * 4206.0 * 4206.0) * 0.00000001)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多