如何编写修改交易金额后自动更新账户余额的AFTER UPDATE触发器
实现代码
CREATE TRIGGER TR_Transaction_UpdateAmount ON Transactions AFTER UPDATE AS BEGIN -- 仅amount字段被修改时才触发执行,减少无效运算 IF UPDATE(amount) BEGIN UPDATE Account SET balance = Account.balance + diff.changeAmount FROM ( -- 按账号分组计算总变动额:更新后金额总和 - 更新前金额总和 SELECT i.accNumber, SUM(i.amount - d.amount) AS changeAmount FROM inserted i INNER JOIN deleted d ON i.transNumber = d.transNumber GROUP BY i.accNumber ) AS diff WHERE Account.accNumber = diff.accNumber END END
逻辑说明
- 利用SQL Server触发器自带的
inserted和deleted临时表:inserted存储更新后的交易记录,deleted存储更新前的交易记录,通过交易唯一标识transNumber关联两条对应记录 - 支持批量更新多条交易记录的场景,不会仅单条更新生效
- 你举的示例场景中,交易金额从20修改为10,计算得到变动额为
10-20=-10,原有余额100加上变动额后正好得到目标值90,完全匹配需求
内容的提问来源于stack exchange,提问作者chacha
相关产品推荐
相关产品推荐

