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