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