Ich empfehle nicht, den Trigger während der Verarbeitung explizit zu deaktivieren - dies kann seltsame Nebeneffekte verursachen.
Der zuverlässigste Weg, um Zyklen in einem Trigger zu erkennen (und zu verhindern), ist die Verwendung von CONTEXT_INFO()
.
Beispiel:
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
Siehe diesen Link für ein ausführlicheres Beispiel.
Hinweis zu CONTEXT_INFO()
in SQL Server 2000:
Kontextinformationen werden unterstützt, aber anscheinend CONTEXT_INFO
Funktion nicht. Sie müssen stattdessen Folgendes verwenden:
SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID