Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
794 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1798126
chapi
Downgradé
Posté le 10-10-2008 à 09:58:10  profilanswer
 

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...
mood
Publicité
Posté le 10-10-2008 à 09:58:10  profilanswer
 

n°1798138
chapi
Downgradé
Posté le 10-10-2008 à 10:11:38  profilanswer
 

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...
n°1798275
MagicBuzz
Posté le 10-10-2008 à 13:39:25  profilanswer
 

non, c'est le seul moyen

n°1799380
xav1611
Posté le 13-10-2008 à 13:43:19  profilanswer
 

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 ;-).

n°1799389
MagicBuzz
Posté le 13-10-2008 à 13:54:18  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
peut ton concatener une table?Remplacer des / par des - sans perdre la valeur dans le champs via SQL
[SQL] Erreur syntaxe [RESOLU]Stockaeg d'IP dans BD SQL légal ?
Requêtes SQL dans Excel et variable dans la feuille[WSH] Resultat de commande, remplacer le Delims
Copie des données d'une table de SQL Server vers une table de MySQL 
Plus de sujets relatifs à : [SQL Server] Remplacer le nom d'une table dans des procédures stockées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR