温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - How to sum multiple rows on trigger update?
sql sql-server

sql - 如何汇总触发器更新中的多行?

发布于 2020-04-04 00:01:15

我在表更新时编写了一个触发器,[CART]以对其他表[HEADERS]进行计数并将值插入到column中[SUM]它有效,但仅适用于1行[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,无法为该任务找到正确的语法。你能帮助我吗?

查看更多

提问者
Dodsonnn
被浏览
14
Squirrel 2020-01-31 19:54

当更新多行时,您的触发器代码无法处理情况。

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