Não recomendo desabilitar explicitamente o gatilho durante o processamento - isso pode causar efeitos colaterais estranhos.
A maneira mais confiável de detectar (e prevenir) ciclos em um gatilho é usar
CONTEXT_INFO()
. Exemplo:
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
Veja este link para um exemplo mais detalhado.
Observação sobre
CONTEXT_INFO()
no SQL Server 2000: Informações de contexto são suportadas, mas aparentemente o
CONTEXT_INFO
função não. Você tem que usar isso em vez disso:SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID