Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Loop de gatilho do SQL Server


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