Bonjour,
En vue de faire évoluer le schema d'une base de données, des colonnes devenues obsolètes doivent être supprimées.
Pour ce faire, je dois pouvoir rechercher toutes les requêtes qui utilisent ces colonnes afin de les adapter.
J'ai donc créé un serveur de test contenant une copie de la structure de la base de données en production.
Afin d'identifier les vues et procédures stockées, j'ai testé différentes possibilités :
1. recherche de texte dans la table système sys.sql_modules avec le nom de la colonne et le nom de la table.
Cependant, cette méthode n'est pas fiable car on peut retrouver des procédures utilisant un nom de colonne provenant d'une autre table que celle qui m'intéresse.
2. Renom de la colonne à supprimer et utilisation de la commande sp_refreshview sur toutes les vues de la DB. Ceci me permet de détermier toutes les vues qui ne fonctionneront plus après le renom de la colonne.
Là ou je cale avec cette méthode, c'est avec les procédures stockées car il ne semble pas exister d'équivalent de sp_refreshview pour les proc. stockées.
J'ai donc tenter une autre méthode consistant à réexécuter toutes les procédures avec des paramètres bidons (NULL) afin d'identifier celle qui échoueront.
Afin d'identifier les procédures en question, j'effectue le select suivant
SELECT so.Type as ObjectType,
ss.name + '.' + so.name as ObjectName,
ISNULL(np.NombreParametre,0) as NombreParametre
FROM sys.objects so
INNER JOIN sys.schemas ss ON so.schema_id = ss.schema_id
LEFT JOIN (
SELECT sp.object_id, COUNT(*) as NombreParametre
FROM sys.parameters sp
GROUP BY sp.object_id
) np ON so.object_id = np.object_id
Ensuite, je constitue une chaine avec le nom de la procédure et autant de NULL qu'il y a de paramètres.
Cependant, cette méthode ne me plait pas car cela nécessite la réexécution de toutes les procédures.
Avez-vous d'autres idées afin que je puisse identifier les procédures stockées à adapter a la suite de la suppression d'une colonne de table ?
Partager