[SQL Server] Remplacer le nom d'une table dans des procédures stockées

Remplacer le nom d'une table dans des procédures stockées [SQL Server] - SQL/NoSQL - Programmation

Marsh Posté le 10-10-2008 à 09:58:10    

Bonjour,
 
Je souhaiterai remplacer la référence à une (ou des) table(s) dans de multiples procédures stockées. Pour cela, j'aimerais éviter de passer à la main dans de nombreuses PS.
 
Connaissez vous un moyen de faire un replace dans toutes les PS d'une base donnée?
 
Merci


Message édité par chapi le 10-10-2008 à 09:59:39

---------------
I drive at 88mph ! Just in case...
Reply

Marsh Posté le 10-10-2008 à 09:58:10   

Reply

Marsh Posté le 10-10-2008 à 10:11:38    

Bon, j'ai trouvé une petite solution.
 
Je génère le script SQL de toutes mes PS. Sous notepad, je fais remplace, et je rebalance tout.
 
Il y a certainement mieux, mais en attendant...


---------------
I drive at 88mph ! Just in case...
Reply

Marsh Posté le 10-10-2008 à 13:39:25    

non, c'est le seul moyen

Reply

Marsh Posté le 13-10-2008 à 13:43:19    

Salut,
 
Le code des procédures stockées est enregistré dans une table système (SYSCOMMENTS il me semble). Tu peux donc déjà lister toutes les procédures qui utilisent les tables obsolètes (il y a une colonne (Type il me semble) dans cette table qui te permet de filtrer sur les procédures stockées). Tu peux ensuite modifier directement soit l'ensemble de ces procédures via une requête standard d'update, soit uniquement les procédures que tu veux si tu connais leur nom.
 
/*Récupérer la liste des SP*/
 
SELECT * FROM SYSCOMMENTS
WHERE Type = 'P' --de mémoire
 
--Vérifier que c'est bien Type comme nom de colonne
 
/*Récupérer la liste des SP contenant le nom de la table*/
 
SELECT * FROM SYSCOMMENTS
WHERE Type = 'P' --de mémoire
AND Text LIKE '%NOM_DE_LA_TABLE_OBSOLETE%'
 
--Vérifier que c'est bien Type et Text comme nom de colonne
 
/*Mettre à jour les SP avec le nom de la table*/
 
BEGIN TRAN MAJ
 
SELECT * FROM SYSCOMMENTS
WHERE Type = 'P'
AND Text LIKE '%NOM_DE_LA_TABLE_OBSOLETE%'
 
UPDATE SYSCOMMENTS
SET Text = REPLACE(Text, 'NOM_DE_LA_TABLE_OBSOLETE', 'NOM_DE_LA_NOUVELLE_TABLE')
WHERE Type = 'P'
AND Text LIKE '%NOM_DE_LA_TABLE_OBSOLETE%'
 
SELECT * FROM SYSCOMMENTS
WHERE Type = 'P'
AND Text LIKE '%NOM_DE_LA_NOUVELLE_TABLE%'
 
--Si pas bon
ROLLBACK TRAN MAJ
 
--Si Ok
COMMIT TRAN MAJ
 
 
Je n'ai pas de base disponible pour le nom des colonnes de ces tables, mais ça se trouve sans trop de difficultés. J'ai fait les requêtes directement en texte (pour la syntaxe, il faut vérifier quand même du coup ;-).

Reply

Marsh Posté le 13-10-2008 à 13:54:18    

1/ je ne suis pas sûr qu'une mise à jour de la table système soit suffisant
2/ si la PS est compilée avec les options d'encryption, alors le champ est vide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed