删除多行的触发器

use*_*507 4 t-sql sql-server-2008

以下是我的触发器:

ALTER TRIGGER [dbo].[trgPaxeDeleted]
   ON  [dbo].[paxe] 
   AFTER DELETE
AS 
declare
@HFflightID int,
@RFflightID int

BEGIN
        Select @HFflightID = hfFlightID, @RFflightID = rfFlightID from deleted

        -- Hinflug: flugKontingent hochsetzen --   
        UPDATE    flightdata
        SET       flightQuota = flightQuota + 1
        WHERE     (flightID = @HFflightID)

        -- Rückflug: flugKontingent hochsetzen --
        UPDATE    flightdata
        SET       flightQuota = flightQuota + 1
        WHERE     (flightID = @RFflightID)

END
Run Code Online (Sandbox Code Playgroud)

这适用于删除单行.但是当删除多行时,只完成一次触发操作.

我该如何改变?

Lit*_*les 10

SQL Server触发为所有行触发一个触发器实例; 该deleted表将包含所有正在更新的行,因此您无法将单个实例存储在变量中.

摆脱以下代码行:

Select @HFflightID = hfFlightID, @RFflightID = rfFlightID from deleted     
Run Code Online (Sandbox Code Playgroud)

您的更新陈述应如下所示:

UPDATE    flightdata         
SET       flightQuota = flightQuota + 1         
WHERE     flightID IN (SELECT hfFlightID FROM deleted)

UPDATE    flightdata         
SET       flightQuota = flightQuota + 1         
WHERE     flightID IN (SELECT rfFlightID FROM deleted)
Run Code Online (Sandbox Code Playgroud)

  • @ user168507你可以用你现在使用的确切触发器代码更新你的问题,并且仍然只导致一行被删除,以及导致它被触发的delete语句? (3认同)