【发布时间】:2022-01-11 23:58:58
【问题描述】:
表格账户和交易
Account = {accNumber, balance, ...}
Transaction = {accNumber, amount, transNumber, ...}
在哪里Transaction.accNumber references Account.accNumber
我已经成功创建了INSERT之后更新余额的触发器
CREATE TRIGGER TR_Account_Balance
ON Transactions AFTER INSERT
AS
BEGIN
UPDATE account SET
balance = ins.newBalance
FROM (
SELECT a.accnumber,a.balance + SUM(i.amount) AS newBalance
FROM Account a
INNER JOIN inserted i ON i.accNumber = a.accNumber
GROUP BY a.accNumber, a.balance
) AS ins
WHERE account.accnumber = ins.accnumber
END
现在我需要创建一个触发器,它会根据交易 AFTER UPDATE 相应地更改余额。
例子:
|accNumber | balance | ...
|-----------------------------
| 1 | 100 | ...
|accNumber | amount | ...
|-----------------------------
| 1 | 20 | ...
如果我们将amount 更新为 10,balance 应该更改为 90。
我怎么可能这样做?
【问题讨论】:
-
将
AFTER INSERT, UPDATE添加到您的定义中? -
视图(如果需要索引)会自动执行此操作 - 为什么要为复杂性烦恼?
-
@DaleK AFTER UPDATE 仍然会增加余额,即使金额减少。我想我必须将金额变化添加到余额中,前提是我(目前)知道如何做到这一点。
-
@SMor 恐怕这只是我任务的一部分。
-
如果您需要逻辑方面的帮助,您需要提供示例数据和所需的结果。
标签: sql sql-server tsql triggers sql-server-express