Si, il s'agit bien de SQL dynamique.
Mais quel est l'intérêt ?
Les noms des tables peuvent-ils évoluer dans le temps, de façon dynamique ? (c'est à dire sans action au niveau du programme).
Vous feriez mieux :
- D'inclure ce code de "propre" dans vos procédures de modifications de lignes
- Ou mieux, de gérer ce code "proprement" sur des triggers directement au niveau des tables concernées.
Sinon, vous devrez mettre à jour votre procédure pour effectuer un contrôle d'injection au niveau du nom de la table.
Mais honnêtement, je trouve ça très sale de vouloir refactoriser au prix de SQL Dynamique.
Pour moi, le SQL Dynamique est utile dans deux cas :
- Scripts de maintenance (régénération d'index par exemple)
- Logiciel qui manipule directement la structure de la base (création/modification/suppression de tables), avec tous les problèmes potentiels de performances et de maintenance qui vont avec.
Pour les autres cas, pour moi le SQL Dynamique est à bannir, car non seulement il y a un risque réel d'injection, mais aussi et surtout, il y a des risques réels :
- de plantage (que se passe-t-il si une table ne contient pas le flag, ou orthographié différemment ?)
- de performances (les requêtes dynamiques sont rarement paramétrée, et peuvent donc s'avérer catastrophiques en termes de performances, et altérer les performances des autres requêtes, en bouffant inutilement du cache de plan d'exécution)
- la maintenabilité est complexe, car ces requêtes ne sont pas détectées comme dépendantes des objets qu'elles références. Ainsi, en cas de maintenance (changement de schéma, suppression/modification/création de tables) on peut parfaitement oublier de mettre à jour des requêtes, et ne s'en rendre compte qu'une fois en production, quand c'est planté.
Partager