Jeg anbefaler ikke, at du eksplicit deaktiverer triggeren under behandlingen - dette kan forårsage mærkelige bivirkninger.
Den mest pålidelige måde at detektere (og forhindre) cyklusser i en trigger på er at bruge CONTEXT_INFO()
.
Eksempel:
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 dette link for et mere detaljeret eksempel.
Bemærkning om CONTEXT_INFO()
i SQL Server 2000:
Kontekstoplysninger er understøttet, men tilsyneladende CONTEXT_INFO
funktion er ikke. Du skal bruge dette i stedet:
SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID