自动SQL计算

时间:2016-10-05 06:11:04

标签: sql-server-2012

我有一张测试表:

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个。

1 个答案:

答案 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表。