--更新认领单的冲销金额
UPDATE ZR_FIN_TRANSASSIGN
SET CHARGEDAMTB = ISNULL(CHARGEDAMTB, 0) - T2.HXAMT
FROM DBO.ZR_FIN_TRANSASSIGN T1
INNER JOIN DELETED T2 ON T2.ZR_FIN_TRANSASSIGN_FK=T1.ZR_FIN_TRANSASSIGNOID
这段代码是触发器里截出来的,如果T2有多条数据,之前认为“ISNULL(CHARGEDAMTB, 0)”是会变化的,更新一条数据就会减一条数据的数量;实际上它是不变的,更新多次以后,CHARGEDAMTB还是最初的值,后一次的更新覆盖了前一次的更新。
解决办法:将DELETED分组汇总再修改,一组只修改一次,避免了上面的问题。
--更新认领单的冲销金额
UPDATE ZR_FIN_TRANSASSIGN
SET CHARGEDAMTB = ISNULL(CHARGEDAMTB, 0) - T2.HXAMT
FROM DBO.ZR_FIN_TRANSASSIGN T1
INNER JOIN (SELECT ZR_FIN_TRANSASSIGN_FK,SUM(HXAMT)AS HXAMT FROM DELETED GROUP BY ZR_FIN_TRANSASSIGN_FK) T2 ON T2.ZR_FIN_TRANSASSIGN_FK=T1.ZR_FIN_TRANSASSIGNOID
总结:和触发器没关系,也不是脑子笨,是受各种i+=1的洗脑。