CREATE TABLE tb(
ID int PRIMARY KEY,
日期 datetime,
发生金额 decimal(18, 2),
余额 decimal(18, 2)
);
INSERT tb VALUES
(101, '1/15/2017', 3.00, 67.50),
(102, '1/16/2017', 5.00, 72.50),
(103, '1/19/2017', 9.00, 81.50),
(104, '1/20/2017', -2.00, 79.50);
GO
-- 通过触发器实现自动更新余额(需要 >= SQL 2012 的版本)
CREATE TRIGGER TR_TB_UPDATE
ON tb FOR UPDATE
AS
SET NOCOUNT ON;
UPDATE DATA SET 余额 = DATA.余额 + U.diff
FROM tb DATA
INNER JOIN(
SELECT
i.id,
diff = SUM(I.发生金额 - D.发生金额) OVER(ORDER BY I.id),
next_id = MIN(i.id) OVER(ORDER BY i.id ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
FROM inserted I, deleted D
WHERE I.id = D.id
) U ON DATA.id >= U.id AND( DATA.id < U.next_id OR U.next_id IS NULL)
;
GO
SELECT * FROM tb;
UPDATE tb SET 发生金额 = 5.02 WHERE id = 102;
SELECT * FROM tb;
UPDATE tb SET 发生金额 = 5.02 WHERE id IN( 101, 103)
SELECT * FROM tb;
GO
DROP TABLE tb;