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)