我在表更新时编写了一个触发器,[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,无法为该任务找到正确的语法。你能帮助我吗?
当更新多行时,您的触发器代码无法处理情况。
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