You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写修改交易金额后自动更新账户余额的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:06:02