Jag rekommenderar inte att du uttryckligen inaktiverar utlösaren under bearbetningen - detta kan orsaka konstiga biverkningar.
Det mest tillförlitliga sättet att upptäcka (och förhindra) cykler i en trigger är att använda CONTEXT_INFO()
.
Exempel:
CREATE TRIGGER tr_Table1_Update
ON Table1
FOR UPDATE AS
DECLARE @ctx VARBINARY(128)
SELECT @ctx = CONTEXT_INFO()
IF @ctx = 0xFF
RETURN
SET @ctx = 0xFF
-- Trigger logic goes here
Se denna länk för ett mer detaljerat exempel.
Anmärkning om CONTEXT_INFO()
i SQL Server 2000:
Kontextinformation stöds men tydligen CONTEXT_INFO
funktionen är det inte. Du måste använda detta istället:
SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID