Bonjour,

Je suis en train de mettre en place des triggers destinés à maintenir des compteurs, par exemple un trigger qui va incrémenter un champ [nb_messages] d'une table [forum_sujet] lorsqu'un nouveau message est inséré dans une table [forum_message].

Par exemple j'ai un trigger de la sorte sur la table [forum_message] :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
UPDATE forum_sujet SET nb_messages = nb_messages + 1
FROM inserted i WHERE id = i.sujet_id
Jusque là tout va bien mais je viens de me rendre compte grâce au plan d'exécution que peu importe si l'enregistrement existe ou pas dans la table [forum_sujet], l'instruction "Clustered Index Update" sur cette table est quand même exécutée (avec un "actual number of rows" = 0) et prend 40% du coût de la requête !

J'ai bien pensé utiliser une instruction IF EXISTS mais ce n'est pas possible car non ensembliste.

Y-a-t-il un moyen de ne pas exécuter l'update si la ligne n'existe pas, mais d'une manière ensembliste ?

Merci d'avance pour vos réponses.