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] :
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 !
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
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.
Partager