首页 > 解决方案 > 如何在触发器更新时对多行求和?

问题描述

我写了一个更新表的触发器[CART]来计数并将值插入到其他表[HEADERS]的列[SUM]中。它有效,但仅适用于 1 行 where [CART].[NUMBER] = [HEADERS].[NUMBER][NUMBER]中的列[CART]不是唯一的,我想计算所有相同[CART]的值[NUMBER]。这意味着[AMOUNT]*[PRICE]对于具有相同数字的每一行,将其添加并插入列[HEADERS].[SUM]

这是我得到的:

CREATE TRIGGER [dbo].[sum] ON [dbo].[CART] AFTER UPDATE AS
BEGIN 
    DECLARE @RESULT DECIMAL
    DECLARE @AMOUNT FLOAT
    DECLARE @PRICE FLOAT
    DECLARE @NUMBER FLOAT
    SET NOCOUNT ON;
    IF UPDATE([NUMBER]) or UPDATE([AMOUNT]) or UPDATE([STATUS])
    BEGIN 
        SELECT @AMOUNT=[AMOUNT],@PRICE=[PRICE],@NUMBER=[NUMBER] FROM inserted 
        IF @NUMBER is not NULL
            BEGIN 
                SELECT @RESULT=@AMOUNT * @PRICE 
                UPDATE HEADERS SET SUM=@RESULT WHERE NUMBER=@NUMBER
            END
    END 
GO

我不太擅长 SQL,而且我找不到此任务的正确语法。你能帮助我吗?

标签: sqlsql-server

解决方案


您的触发器代码不处理更新多行的情况。

CREATE TRIGGER [dbo].[sum] ON [dbo].[CART] AFTER UPDATE AS
BEGIN 
    SET NOCOUNT ON;

    IF UPDATE([NUMBER]) or UPDATE([AMOUNT]) or UPDATE([STATUS])
    BEGIN 
        UPDATE H
        SET    [SUM] = I.AMOUNT * I.PRICE 
        FROM   inserted I
               INNER JOIN HEADER H ON I.NUMBER = H.NUMBER
    END 
GO

推荐阅读