sql >> Base de Datos >  >> RDS >> Sqlserver

Bucle de activación de SQL Server

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