Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ciclo di trigger di SQL Server

Non consiglio di disabilitare esplicitamente il trigger durante l'elaborazione:ciò può causare strani effetti collaterali.

Il modo più affidabile per rilevare (e prevenire) i cicli in un trigger è utilizzare CONTEXT_INFO() .

Esempio:

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

Vedi questo link per un esempio più dettagliato.

Nota su CONTEXT_INFO() in SQL Server 2000:

Le informazioni sul contesto sono supportate ma apparentemente il CONTEXT_INFO la funzione non lo è. Devi usare questo invece:

SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID