Sql 如何在触发器更新时对多行求和?

Sql 如何在触发器更新时对多行求和?,sql,sql-server,Sql,Sql Server,我在更新表[CART]时编写了一个触发器,用于计数并将值插入其他表[HEADERS]列[SUM]。它只适用于[CART].[NUMBER]=[HEADERS].[NUMBER]的1行。[CART]中的[NUMBER]列不是唯一的,我想计算[CART]中的所有值,其中[NUMBER]是相同的。这意味着对于具有相同编号的每一行,[AMOUNT]*[PRICE],将其添加并插入列[HEADERS].[SUM] 以下是我得到的: CREATE TRIGGER [dbo].[sum] ON [dbo].[

我在更新表
[CART]
时编写了一个触发器,用于计数并将值插入其他表
[HEADERS]
[SUM]
。它只适用于
[CART].[NUMBER]=[HEADERS].[NUMBER]
的1行。
[CART]
中的
[NUMBER]
列不是唯一的,我想计算
[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,也找不到适合此任务的正确语法。您能帮助我吗?

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

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
触发器在每个DML语句中触发一次,而不是在DML语句中每行触发一次。此触发器假定一个
更新
将只包含一行,因此您的进程将只对一行起作用。