SQL Server : Renommer des tables, objets, champs et bases de données
Comment renommer des objets, colonnes, base de données dans SQL Server… Tout simplement à l'aide de 2 procédures stockées bien utiles :
- sp_renamedb -- Renomme une base de données
- sp_rename -- Renomme un objet (table, vue, fonction, etc.) ou une colonne (champ)
L'utilisation de ces 2 commandes est très simple
-- Renomme une base de données
exec sp_renamedb 'anc_basededonnees', 'nv_basededonnees'
-- Renomme une table
exec sp_rename 'tablea', 'tableb'
-- Renomme un champ
exec sp_rename 'dbo.tableb.xxx', 'id', 'COLUMN'
Notez que le dernier argument de « sp_rename » n'est là qu'en cas d'ambigüité entre plusieurs noms. Pour « sp_renamedb » il faudra faire attention à ce qu'aucunes connexions ne soient actives sur la base de données au moment de l'exécution de la commande.
Là où il peut y avoir problème c'est dès lors que vous essayer tels ou tels type de syntaxes :
-- Renomme une table
exec sp_rename 'dbo.tableb', 'dbo.tablea'
exec sp_rename 'dbo.tablex', 'dbo.[tablea]'
exec sp_rename 'dbo.tabley', 'scha.tablez'
La commande ne vous renverra pas d'erreurs, mais si vous essayer cette commande :
-- Renomme une table
exec sp_rename 'dbo.tablea', 'dbo.tableb'
exec sp_rename 'dbo.[tablea]', 'dbo.tablex'
exec sp_rename 'scha.tablez', 'dbo.tabley'
Vous aurez des erreurs vous indiquant que vos objets n'existent pas… ???
En fait le moteur est extrêmement tolérant, un peu trop à mon sens dans cette syntaxe et vous laisse saisir des caractères spéciaux dans la 2ème partie sans vous prévenir du risque.
Le risque ? Les commandes plus haut génèrent respectivement des tables se nommant :
- [dbo].[dbo.tablea]
- [dbo]. [dbo.[tablea]]]
- [dbo].[scha.tablea]
Rien à voir avec ce que l'on attend… Comment avoir le résultat attendu, tout simplement en suivant quelques règles avec le sp_rename :
- Pas de nom de schéma dans le 2ème argument de sp_rename, çà n'est pas le rôle de cette commande, utiliser ALTER SCHEMA si vous souhaitez déplacer un objet d'un schéma à un autre
- Pas de crochets ou de points dans le 2ème argument, ils sont intégrer comme faisant parti du nom de celui-ci
En fait le sp_rename s'utilise comme cela :
-- Exemple de changement de nom de table réversible
exec sp_rename '[bdd_test].[dbo].[tablez]', 'nouveaunom'
go
exec sp_rename '[bdd_test].[dbo].[nouveaunom]', 'tablez'
go
La partie à gauche peut (ou doit) être totalement qualifiée, la partie à droite (le 2ème argument) ne doit rien contenir si ce n'est le nouveau nom de l'objet… Y compris les caractères spéciaux si le nom en contient… Nul besoins de crochets, guillemets, schéma, etc.
Bon changement de nom…
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :