Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

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 :
Publié lundi 18 février 2008 09:00 par christian

Commentaires

lundi 18 février 2008 10:38 by dominique Gratpain

# re: SQL Server : Renommer des tables, objets, champs et bases de données

Dans la famille "les procédures stockées bien utiles", je demande les procédures permettant :

- de copier une table uniquement la structure ou uniquement les données ou les deux (structure et données).

Copie d'une table d'une base sur une autre base ou copie d'une table sur la même base mais en changeant le nom.

- de copier une procédure stockée d'une base sur une autre base ou sur la même base mais en changeant le nom.

Avez-vous ces procédures dans votre jeu des 7 familles ?

Ou faut-il utiliser SqlSmo ?

A ce sujet, SqlDmo est-il toujours d'actualité ?

SMO est-il plus rapide avec Sql Server 2008 ?

Qu'est ce qu'il "rame" avec Sql Server 2005 !!

Merci pour vos réponses.

jeudi 21 février 2008 13:13 by christian

# re: SQL Server : Renommer des tables, objets, champs et bases de données

Pour la première question : http://blogs.codes-sources.com/christian/archive/2007/09/21/sql-server-copier-une-table-avec-ses-donn-es-ou-uniquement-sa-structure.aspx

Pour la copie d'autres objets, c'est plus compliquer, soit en générant le script dans Management Studio soit en passant par SMO ou SQLDMO.

SQLDMO est toujours fournit mais fait partie des outils fournit uniquement pour la compatibilité ascendente... Il sera encore fournit sans 2008, sauf Express où il sera à part

Pour ce qui est des améliorations de SMO dans 2008, aucunes idées, je n'ai pas eu l'ocasion de tester !

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [WPF] Nouvel article sur c2i.fr par Richard Clark le il y a 7 heures et 0 minutes

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le il y a 11 heures et 5 minutes

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le 09-05-2008, 10:47

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le 09-05-2008, 10:04

- MS AutoCollage par alex# le 09-05-2008, 09:18

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le 09-05-2008, 08:52

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11