触发器在 SQL 服务器中的多行更新中给出错误

Trigger gives an error on multiple Rows Update in SQL SERVER

当我创建一个在一行上工作正常的触发器时我遇到了问题,但是当我将它应用于多行时它给我这个错误

This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression

触发器是:

Create TRIGGER AccountChange
ON Customer
AFTER UPDATE
AS
BEGIN
    IF(UPDATE(TotalSales))
    BEGIN
        DECLARE @TotalSales MONEY, @AccountNumber NVARCHAR(20),
                @TotalSalesOld MONEY, @customText1 NVARCHAR(50),
                @AccountTypeId int

        SET @TotalSales = (SELECT TotalSales FROM INSERTED)
        SET @TotalSalesOld = (SELECT TotalSales FROM DELETED)
        SET @AccountNumber = (SELECT AccountNumber FROM INSERTED)
        SET @AccountTypeId = (SELECT AccountTypeId FROM INSERTED)

        IF(@TotalSales BETWEEN 0 AND 5000)
           UPDATE Customer 
           SET AccountTypeID = 8 
           WHERE AccountNumber = @AccountNumber
   END
END

考虑到我有一个每次都有多个 insertion/update 的预定连接,我只想让它处理任意数量的插入行。

提前致谢。

您的触发器应该像这样处理 UPDATE 多个受影响的行:

CREATE TRIGGER AccountChange
ON dbo.Customer
AFTER UPDATE
AS
BEGIN
    UPDATE dbo.Customer 
    SET AccountTypeID = 8 
    FROM Inserted i
    INNER JOIN Deleted d ON i.AccountId = d.AccountId  -- use the primary key here
    WHERE AccountNumber = i.AccountNumber
      AND i.TotalSales BETWEEN 0 AND 5000
      AND i.TotalSales <> d.TotalSales  -- TotalSales was updated
      AND dbo.Customer.AccountId = i.AccountId   -- use the PK here
END

一个非常简单直接的基于集合的语句 - 仅此而已!