No recomiendo deshabilitar explícitamente el activador durante el procesamiento; esto puede causar efectos secundarios extraños.
La forma más confiable de detectar (y prevenir) ciclos en un disparador es usar CONTEXT_INFO()
.
Ejemplo:
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
Ver este enlace para un ejemplo más detallado.
Nota sobre CONTEXT_INFO()
en SQL Server 2000:
La información de contexto es compatible, pero aparentemente CONTEXT_INFO
la función no lo es. Tienes que usar esto en su lugar:
SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID