Partager via


Protection des données pendant une opération de changement de nom

Mise à jour : novembre 2007

Lorsque vous renommez un objet de base de données, puis que vous générez le projet de base de données, un script de déploiement qui reflète cette modification est généré. Lorsque vous renommez une colonne ou une table, le script supprime la colonne ou la table d'origine portant 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 sont 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. L'onglet Générer des propriétés du projet comprend une case à cocher appelée 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.

Utilisation de sp_rename

Vous pouvez modifier manuellement le script de compilation pour convertir l'instruction drop/add de la colonne et de la table en sp_rename.

Par exemple, vous pouvez spécifier la commande suivante pour une table :

sp_rename '<OLD TABLE NAME>', '<NEW TABLE NAME>', 'OBJECT'

Par exemple, vous pouvez spécifier la commande suivante pour une colonne :

sp_rename '<TABLE NAME>.<OLD COLUMN NAME>', '<NEW COLUMN NAME>', 'COLUMN'

Pour plus d'informations, consultez Comment : déployer des modifications de refactorisation d'une base de données.

Déplacement de données entre les anciens objets et les nouveaux

Pour éviter tout perte potentielle de données que l'instruction drop peut entraîner, vous pouvez choisir de ne pas déployer l'instruction drop. Vous aurez des copies à la fois de l'ancien objet et du nouvel objet dans la base de données cible. Vous pouvez déplacer les données de l'ancien objet vers le nouvel objet, puis supprimer l'objet ancien. Pour ce faire, vous pouvez procéder de l'une des façons suivantes :

  • Utilisez une instruction select ou une autre instruction T-SQL pour déplacer les données manuellement.

    Par exemple, vous pouvez spécifier la commande suivante pour une table :

    -- Deploy table add only.
    
    -- Move the data between the old and new tables.
    INSERT Region_New SELECT * FROM Region_Old
    
    -- Drop the old table manually.
    DROP TABLE Region_Old
    

    Par exemple, vous pouvez spécifier la commande suivante pour une colonne :

    -- Deploy column add only.
    
    -- Move the data between the old and new columns.
    UPDATE Region SET ColumnNew = ColumnOld
    
    -- Drop the old column manually.
    ALTER TABLE Region DROP COLUMN ColumnOld
    
  • Utilisez l'utilitaire bcp, DTS (Data Transformation Services) (SQL 2000) ou SQL Server Integration Services (SQL 2005) pour déplacer automatiquement les données.

Déplacement de données à l'aide du stockage temporaire

Pour éviter toute perte de données potentielle que l'instruction drop peut entraîner, vous pouvez déplacer vos données vers un stockage temporaire. Avant de déployer la modification, vous déplacez les données de l'ancienne table vers un emplacement temporaire. Par exemple, vous pouvez déplacer les données d'une table vers une autre base de données ou vers un fichier de données. Vous déployez ensuite les instructions drop et add. Enfin, vous déplacez les données de l'emplacement temporaire vers la nouvelle table. Pour ce faire, vous pouvez procéder de l'une des façons suivantes :

  • Utilisez une instruction select into ou une autre instruction T-SQL pour déplacer les données manuellement.

    Par exemple, vous pouvez spécifier la commande suivante pour une table :

    -- Move the data to temporary storage.
    SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region_Old
    
    -- Deploy table drop/add.
    
    -- Move the data to the new table.
    INSERT Region_New SELECT * FROM TemporaryStorage.dbo.Region_Storage
    

    Par exemple, vous pouvez spécifier la commande suivante pour une colonne :

    -- Move the data to temporary storage.
    SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region
    
    -- Deploy column drop/add.
    
    -- Move the data to the new column.
    UPDATE Region SET ColumnNew = rs.ColumnOld FROM Region r JOIN TemporaryStorage.dbo.Region_Storage rs ON r.RegionID = rs.RegionID
    
  • Utilisez l'utilitaire bcp, DTS (Data Transformation Services) (SQL 2000) ou SQL Server Integration Services (SQL 2005) pour déplacer automatiquement les données.

Voir aussi

Tâches

Comment : contrôler la perte de données pendant le déploiement sur des bases de données existantes

Autres ressources

Changement du nom des objets de base de données

Vue d'ensemble de la refactorisation de changement de nom

Déploiement de modifications de refactorisation sur une base de données

Génération et déploiement de schémas de base de données