触发器在 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
一个非常简单直接的基于集合的语句 - 仅此而已!
当我创建一个在一行上工作正常的触发器时我遇到了问题,但是当我将它应用于多行时它给我这个错误
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
一个非常简单直接的基于集合的语句 - 仅此而已!