我有一张测试表:
PiggyBank_Current
- Name (Primary Key)
-- Jackson
- Value
-- 0
PiggyBank_Default
- Name
-- Jackson
- value
-- 100
PiggyBank_Earn
- Name
-- Jackson
- Value
-- 20
每次我向PiggyBank_Earn添加新的Jackson收入记录时,它是否有可能自动计算所有Jackson收入,然后将其添加为默认值。然后总数将替换表名为PiggyBank_Current的值,即人名等于杰克逊?所以对于这个例子,它总共是120个。
答案 0 :(得分:1)
您可以使用触发器来实现此目的。我使用id
代替[name]
来连接表:
CREATE TRIGGER PiggyBank_Earn_Trigger
ON PiggyBank_Earn
AFTER INSERT, UPDATE
AS
;WITH cte AS (
SELECT id,
SUM([val]) as [value]
FROM (
SELECT d.id,
SUM(d.[value]) as [val]
FROM inserted i
INNER JOIN PiggyBank_Default d
ON i.id = d.id
GROUP BY d.id
UNION ALL
SELECT e.id,
SUM(i.[value]) as [val]
FROM inserted i
INNER JOIN PiggyBank_Earn e
ON i.id = e.id
GROUP BY e.id
) as t
)
MERGE PiggyBank_Current as target
USING cte as source
ON target.id = source.id
WHEN MATCHED THEN
UPDATE SET [value] = source.[value]
WHEN NOT MATCHED THEn
INSERT VALUES (source.id, source.[value]);
它从id
收集CTE中的所有inserted
,并从2个表中获取总和。然后是MERGE
PiggyBank_Current
表。