Partager via


Considérations à prendre en compte avant de renommer des objets de base de données

Mise à jour : novembre 2007

Avant de renommer un objet de base de données dans Visual Studio Team System Database Edition, vous devez prendre en considération les problèmes suivants :

Procédure permettant d'éviter toute perte de données lorsque vous renommez des colonnes et des tables

Changement du nom de colonnes dans des vues

Effets des erreurs de génération

Effets sur les plans de génération de données

Effets sur les tests unitaires

Effets sur les scripts T-SQL

Procédure permettant d'éviter toute perte de données lorsque vous renommez des colonnes et des tables

Lorsque vous renommez un objet de base de données, le script de déploiement qui est généré quand vous générez le projet reflète cette modification. Lorsque vous renommez une colonne ou une table, le script supprime l'objet d'origine qui porte le nom d'origine et ajoute la nouvelle colonne ou table avec le nouveau nom. Si vous déployez cette modification sur la base de données existante comme une mise à jour, les données contenues dans la colonne ou la table d'origine seront perdues.

Vous pouvez contrôler si la colonne ou la table d'origine est supprimée en définissant l'option appropriée dans les propriétés du projet. Pour ce faire, ouvrez les propriétés du projet, cliquez sur l'onglet Générer, puis activez ou désactivez la case à cocher Générer des instructions DROP pour les objets qui se trouvent dans la base de données cible mais pas dans le projet de base de données. Si vous activez cette case à cocher, l'instruction drop pour l'ancien objet est incluse dans le script de déploiement qui est généré lorsque vous générez le projet. Si vous la désactivez, l'instruction drop pour l'ancien objet n'est pas incluse dans ce script.

Pour éviter toute perte de données potentielle provoquée par l'instruction drop, vous devez l'anticiper. Les exemples suivants présentent des approches que vous pouvez utiliser pour effectuer une migration sans risque de vos données :

  • Remplacez les instructions drop/add par des instructions sp_rename.

  • Ne déployez pas l'instruction drop. Vous aurez des copies aussi bien de l'ancien objet que du nouvel objet, et vous pouvez déplacer les données de l'un à l'autre. Vous pouvez déplacer les données manuellement en utilisant une instruction select into ou une autre instruction T-SQL. Vous pouvez utiliser le programme de copie en bloc, DTS (Data Transformation Services) (SQL 2000) ou SQL Server Integration Services (SQL 2005) pour déplacer automatiquement les données.

  • Avant de déployer la modification, déplacez les données de l'ancienne table vers un emplacement temporaire (par exemple, vers une table située dans une autre base de données). Déployez les instructions drop et add. Déplacez les données de l'emplacement temporaire vers le nouvel objet. Vous pouvez déplacer les données manuellement en utilisant une instruction select into ou une autre instruction T-SQL. Vous pouvez utiliser le programme de copie en bloc, DTS (Data Transformation Services) (SQL 2000) ou SQL Server Integration Services (SQL 2005) pour déplacer automatiquement les données.

Pour plus d'informations, consultez Protection des données pendant une opération de changement de nom.

Changement du nom de colonnes dans des vues

Une vue se compose d'une instruction qui sélectionne des colonnes dans des tables ou dans d'autres vues. Les tables qui sont utilisées dans la vue sont appelées « tables de base » ou « tables sous-jacentes ». Par exemple, le code suivant crée une vue qui est basée sur la table HumanResources.Employee :

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee

Lorsque vous renommez une colonne dans une vue, la colonne n'est pas renommée dans la table sous-jacente. Au lieu de cela, le nom dans la vue est un alias, comme dans les exemples suivants :

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title AS JobTitle
       FROM HumanResources.Employee

CREATE VIEW dbo.vEmployeeTest (EmployeeID, JobTitle)
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee
Remarque :

Si une vue utilise SELECT * pour obtenir les données de la table sous-jacente, le * est développé pour répertorier les colonnes individuelles. La colonne renommée est un alias, comme dans les exemples précédents.

Si vous voulez renommer la colonne à la fois dans la vue et dans la table sous-jacente, renommez plutôt la colonne dans la table, ce qui met automatiquement à jour la colonne dans la vue.

Effets des erreurs de génération

Lorsque vous renommez un objet de base de données dans Database Edition, une tentative de mise à jour des autres objets de base de données, des plans de génération de données, des tests unitaires et des scripts qui font référencent à cet objet est effectuée. Pendant que vous travaillez dans un projet de base de données, vous pouvez exécuter une action qui introduit une erreur de génération, puis exécuter une autre action qui corrige cette erreur de génération. Par exemple, vous pouvez supprimer une table, puis mettre à jour une vue qui dépend de cette table pour supprimer la référence à la table supprimée. Entre la suppression de la table et la mise à jour de la vue, votre projet aura des erreurs de génération.

Si vous renommez un objet de base de données lorsque vous avez des erreurs de génération dans votre projet, cet objet peut néanmoins être renommé correctement. Toutefois, il peut s'avérer impossible de mettre à jour correctement toutes les références à l'objet que vous renommez. S'il y a des erreurs de génération dans votre projet, vous en êtes averti dans la boîte de dialogue Aperçu des modifications. Si vous continuez, l'objet est renommé et les références sont mises à jour dans la mesure du possible. Si vous annulez l'opération, vous pouvez commencer par corriger les erreurs de génération, puis recommencer l'opération de changement du nom.

La boîte de dialogue Aperçu des modifications affiche des avertissements pour les éléments suivants :

  • Erreurs de génération dans le projet de base de données

  • Erreurs de syntaxe dans les scripts et les tests unitaires

  • Plans de génération de données incorrects

Effets sur les plans de génération de données

Lorsque vous renommez un objet de base de données dans Team Edition for Database Professionals, une tentative de mise à jour des plans de génération de données qui référencent cet objet est effectuée. Toutefois, vous devez prendre en considération les points suivants :

  • Avant de pouvoir renommer un objet, vous devez enregistrer tous les plans de génération de données qui sont ouverts dans l'éditeur. Si des plans de génération de données sont ouverts lorsque vous essayez de renommer un objet, vous serez d'abord invité à les enregistrer. Si vous continuez, tous les plans de génération de données ouverts sont enregistrés et fermés automatiquement, puis l'opération de changement de nom se poursuit. Si vous ne continuez pas, l'opération de changement de nom est annulée. Tous les plans de génération de données ouverts le restent et ne sont pas enregistrés.

  • Vous devez mettre à jour manuellement les plans de génération de données qui utilisent des générateurs de données liés aux données.

Pour plus d'informations, consultez Génération de données avec les générateurs de données.

Effets sur les tests unitaires

Les instructions Transact-SQL (T-SQL) d'un test unitaire référencent généralement les objets de la base de données spécifiée dans le ValidationConnectionString et le ExecutionConnectionString du test unitaire. Voici deux cas où cette règle n'est pas respectée :

  • Les instructions T-SQL d'un test unitaire peuvent référencer des objets contenus dans d'autres bases de données.

  • Les instructions T-SQL d'un test unitaire peuvent référencer des objets contenus dans la même base de données, mais dans des schémas différents (SQL Server 2005).

Lorsque vous renommez un objet de base de données dans Database Edition, une tentative de mise à jour des tests unitaires de la solution qui référencent cet objet est effectuée. Dans les cas mentionnés précédemment, il peut s'avérer impossible de mettre à jour les tests unitaires. Pour mettre à jour des tests unitaires lorsque vous renommez un objet de base de données, vous devez vous assurer que vous utilisez le nom qualifié complet des objets dans vos tests unitaires. Si tel est le cas, le moteur de refactorisation peut les mettre à jour chaque fois que vous renommez un objet de schéma.

Pour plus d'informations sur les tests unitaires, consultez Vue d'ensemble du test unitaire de base de données.

Effets sur les scripts T-SQL

Les scripts T-SQL d'un projet de base de données référencent généralement les objets de schéma contenus dans la base de données du projet de base de données. Voici deux cas où cette règle n'est pas respectée :

  • Les instructions T-SQL d'un script peuvent référencer des objets contenus dans d'autres bases de données.

  • Les instructions T-SQL d'un script peuvent référencer des objets contenus dans la même base de données, mais dans des schémas différents (SQL Server 2005).

Lorsque vous renommez un objet de base de données dans Database Edition, une tentative de mise à jour des scripts de la solution qui référencent cet objet est effectuée. Dans les cas mentionnés précédemment, il peut s'avérer impossible de mettre à jour les scripts. Pour mettre à jour des scripts lorsque vous renommez un objet de base de données, vous devez vous assurer que vous utilisez le nom qualifié complet des objets dans vos scripts. Si tel est le cas, le moteur de refactorisation peut les mettre à jour chaque fois que vous renommez un objet de schéma.

Pour plus d'informations sur les scripts, consultez Utilisation de scripts de base de données.

Sécurité

Si une erreur empêche l'exécution d'une opération de refactorisation, les informations sur l'erreur sont écrites dans le journal des événements de l'application, où tout utilisateur qui a des autorisations d'utilisateur normal peut les consulter. Si vos informations de schéma sont considérées comme sensibles et peuvent apparaître dans le journal, vous pouvez effacer le journal ou restreindre l'accès à l'ordinateur client.

Voir aussi

Concepts

Vue d'ensemble de la terminologie de Database Edition

Autres ressources

Changement du nom des objets de base de données

Vue d'ensemble de la refactorisation de changement de nom