Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Boucle de déclenchement SQL Server

Je ne recommande pas de désactiver explicitement le déclencheur pendant le traitement - cela peut provoquer des effets secondaires étranges.

Le moyen le plus fiable de détecter (et d'empêcher) les cycles dans un déclencheur consiste à utiliser CONTEXT_INFO() .

Exemple :

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

Voir ce lien pour un exemple plus détaillé.

Remarque sur CONTEXT_INFO() dans SQL Server 2000 :

Les informations de contexte sont prises en charge mais apparemment le CONTEXT_INFO la fonction ne l'est pas. Vous devez utiliser ceci à la place :

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