Dans SQL Server 2008, un déclencheur sur la table tblMedia, [dbo].[tblMediaAfterInsertOrUpdate], provoque par inadvertance un comportement récursif. Ce comportement se produit lorsque le déclencheur est à la fois déclenché et se déclenche ensuite lui-même.
Pour comprendre le problème, examinons le déclencheur :
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN ...
Après l'insertion ou la mise à jour : Le déclencheur est exécuté avant que les insertions ou les mises à jour ne soient validées.
Récursion potentielle : L'instruction de mise à jour à l'intérieur du trigger tente de modifier la table tblMedia. Cette modification pourrait potentiellement déclencher à nouveau le même déclencheur, conduisant à une boucle infinie.
Prévenir la récursion : Pour éviter ce comportement récursif, nous pouvons utiliser la fonction TRIGGER_NESTLEVEL() pour vérifier le niveau d'imbrication du déclencheur. Si le niveau d'imbrication est supérieur à 1, le déclencheur est invoqué par un autre déclencheur et doit être ignoré.
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */ BEGIN ... END END
Explication :
En incorporant cette vérification dans le déclencheur, nous l'empêchons de se répéter indéfiniment et garantissons que les modifications de données nécessaires ne sont effectuées qu'une seule fois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!