我正在从这样的全局临时表中执行更新:
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位
答案 0 :(得分:0)
这可能发生的一种方式......(但可能不是你所看到的)
查看## GlobalTable中是否有两行,其中InitialAmount的值相同,但差值的值不同。
如果是这样,那么some_table中的一行可能与## GlobalTable中的两行(或更多)匹配,而SQLServer不保证你会得到什么答案。
根据我的经验,SQLServer将选择要在更新中使用的行,它通常是根据执行计划从## GlobalTable检索的最后一个合格行。由于执行计划随着表内容的改变而发生变化,因此结果不是那么可预测,并且在编写代码时无法指望。
除非您知道## GlobalTable中的每一行都有一个InitialAmount的唯一值,否则您应该选择一种更可靠的方式来将some_table与## GlobalTable连接。