Nie polecam jawnego wyłączania wyzwalacza podczas przetwarzania — może to powodować dziwne skutki uboczne.
Najbardziej niezawodnym sposobem wykrywania (i zapobiegania) cyklom w wyzwalaczu jest użycie CONTEXT_INFO()
.
Przykład:
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
Zobacz ten link dla bardziej szczegółowego przykładu.
Uwaga na temat CONTEXT_INFO()
w SQL Server 2000:
Informacje kontekstowe są obsługiwane, ale najwyraźniej CONTEXT_INFO
funkcja nie jest. Musisz użyć tego zamiast:
SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID