Comment renommer une colonne sans casser votre base de données SQL Server

Renommer une colonne d’une table ou d’une vue n’est pas quelque chose qu’un développeur SQL doit faire tous les jours. Cependant, le moment venu, comment peut-il faire cela facilement et sans effort ?

Renommer simplement une colonne n’est pas difficile. Pour renommer la colonne TerritoryID de la table Sales.SalesTerritory en TerID, exécutez l’instruction suivante:

EXECUTE sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';

Le problème est que vous obtiendrez l’avertissement suivant :

Attention : changer une partie du nom de l’objet peut inhiber les scripts et les procédures stockées.

De plus, éventuellement celui-ci:

Impossible de renommer l’objet ‘Sales.SalesTerritory.TerritoryID’ car il participe dans des dépendances appliquées.

Quels sont ces scripts qui seront cassés ?

Que vous avez une procédure stockée Sales.vTer qui référencie la colonne TerritoryID de la table Sales.SalesTerritory. La procédure sp_rename renommera uniquement la colonne TerritoryID de la table Sales.SalesTerritory, mais pas celle de la procédure stockée Sales.vTer.

Par conséquent, la table Sales.SalesTerritory contient la colonne TerrID, mais la procédure stockée appelle Sales.SalesTerritory.TerritoryID, qui n’existe plus. Le script sera cassé, et son exécution échouera.

Que sont les dépendances appliquées ?

Une dépendance est « appliquée » lorsque l’objet de référence dispose d’une expression liée au schéma. Ce message s’affiche également, s’il y a un autre objet que vous avez supprimé et recréé avec le nouveau nom de colonne afin de renommer la colonne avec succès.

Comment trouver les procédures stockées et autres objets qui seront affectés par le changement de nom de colonne ?

SQL Server Management Studio permet de suivre les dépendances, par l’intermédiaire de l’option Afficher les dépendances. Il présente les objets dont dépendent celui sélectionné, mais vous devrez mettre à jour un par un, les objets qui font référence à la colonne renommée.

Pour renommer une colonne à l’aide de sp_rename, vous devez :

  1. Trouver tous les objets dépendants qui font référence à la colonne de la table/vue
  2. Retirer toutes les dépendances
  3. Renommer la colonne en exécutant sp_rename
  4. Recréer toutes les dépendances qui ont été retirées à l’étape 2
  5. Si vous souhaitez renommer plus d’une colonne, répétez les étapes 1 à 4

Ce n’est pas un processus attrayant. Ça vous donne envie de laisser tomber le changement de nom, plutôt que de continuer ainsi.

Comment renommer une colonne sans trop d’ennuis ?

ApexSQL Search peut aider. C’est un complément gratuit de SQL Server Management Studio et Visual Studio qui recherche le texte dans des objets de la base de données SQL et les données des tables et vues SQL. Il permet de changer les tables, les vues, les procédures stockées, les fonctions, les colonnes, les noms des paramètres et les schémas sans casser les dépendances, tout en visualisant toutes les interdépendances entre les objets.

  1. Ouvrez SQL Server Management Studio ou Visual Studio
  2. Dans l’Explorateur d’objets/Explorateur de serveur, accédez à une colonne à renommer d’une table ou d’une vue
  3. Faites un clic droit sur la colonne et sélectionnez l’option Safe Rename dans le menu ApexSQL Search:

  4. Pour voir les changements qui vont être exécutés, cliquez Generate preview dans la boîte de dialogue Safe rename column

  5. L’onglet Generate script affiche le script qui sera exécuté pour renommer la colonne

  6. Ouvrez l’onglet Warnings pour voir les informations sur les problèmes potentiels qui se produisent pendant le processus de changement de nom

  7. Ouvrez l’onglet Sequence pour voir toutes les actions qui seront exécutées pendant le changement de nom. Ce sont les actions que vous auriez dû passer manuellement si vous aviez utilisé la procédure sp_rename

  8. Ouvrez l’onglet Dependencies pour voir les objets qui dépendent de la colonne renommée. Ce sont les objets qui seront automatiquement modifiés afin d’empêcher les scripts de rupture. Si vous aviez utilisé la procédure sp_rename, vous devriez les trouver et les modifier manuellement

  9. Si vous souhaitez modifier le script avant de l’exécuter, cliquez sur le bouton Open. Le script généré sera ouvert dans l’éditeur de requête SQL Server Management Studio / l’éditeur de Visual Studio

    Vérifiez, modifiez si nécessaire et exécutez-le en cliquant sur Execute ou enregistrez-le dans un fichier

  10. Pour exécuter le script tel quel, cliquez sur le bouton Rename

Renommer une colonne peut être facile et gratuit. Vous n’avez pas à analyser votre base de données entière et recherche les dépendances par vous-même. ApexSQL Search peut le faire pour vous. Il va trouver tous les objets dépendants, les renommer et les supprimer/recréer lorsque cela est nécessaire, pour éviter de casser les scripts.

Article traduit par Philippe Geiger
Consultant certifié MCSE Data Platform et Business Intelligence et formateur certifié MCT.
Blog : http://blog.pgeiger.net
Twitter : @pgeiger

October 20, 2014