SQL Server更新设置金额=(正数字)+(负数字)增加金额?为什么?

时间:2012-07-20 21:26:59

标签: sql sql-server-2008-r2 set numeric

我正在从这样的全局临时表中执行更新:

update some_table
set Amount = (##GlobalTable.InitialAmount) + (##GlobalTable.[Difference])
from ##GlobalTable
where Amount = ##GlobalTable.InitialAmount

Amount,InitialAmount和Difference列都是数字(21,2)

Amount和InitialAmount始终为正数。问题是,当差异为负时,产生的金额实际上会增加负差异。它应该执行减法,但事实并非如此。当差异是积极的,它工作正常。任何想法为什么会发生这种情况?

我使用的是使用SQL Server 2008 R2的Windows 7 Enterprise SP1 64位

1 个答案:

答案 0 :(得分:0)

这可能发生的一种方式......(但可能不是你所看到的)

查看## GlobalTable中是否有两行,其中InitialAmount的值相同,但差值的值不同。

如果是这样,那么some_table中的一行可能与## GlobalTable中的两行(或更多)匹配,而SQLServer不保证你会得到什么答案。

根据我的经验,SQLServer将选择要在更新中使用的行,它通常是根据执行计划从## GlobalTable检索的最后一个合格行。由于执行计划随着表内容的改变而发生变化,因此结果不是那么可预测,并且在编写代码时无法指望。

除非您知道## GlobalTable中的每一行都有一个InitialAmount的唯一值,否则您应该选择一种更可靠的方式来将some_table与## GlobalTable连接。