VS 2010 Base de données de projet chute des données sur le changement de nom de la colonne
-
26-09-2019 - |
Question
Je teste les nouvelles fonctionnalités du projet de base de données de Visual Studio 2010 et que vous souhaitez changer le nom d'une colonne dans une table. J'ai changé le nom dans le script de création et déployé contre la base de données. Le script généré vient de déposer la colonne et a ajouté une nouvelle colonne avec le nom correct, mais toutes les données ont été perdues.
Y at-il un paramètre qui ne baissera pas les données de la colonne?
Je cherche la solution « DataDude » à cette question. (S'il y a un)
PRINT N'Altering [dbo].[Users]...';
GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];
GO
ALTER TABLE [dbo].[Users]
ADD [Testn] NVARCHAR (50) NULL;
GO
Merci, Keith
La solution
Utilisez la vue du schéma en cliquant sur Affichage -> Base de données de schéma Affichage
Développez les tables et ses colonnes.
clic droit et cliquez sur la colonne Refactor -> Renommer ...
Modifier le nom dans le champ Nouveau nom avec Aperçu des modifications case cochée.
Notez qu'il change non seulement le nom de la colonne, mais aussi les procédures stockées qui peuvent être faisant référence à cette colonne.
A l'intérieur du projet de base de données d'un fichier refactorlog est créé, qui montre le changement de nom.
Lorsque le nouveau schéma est déployé sur la base de données existante, il semble que DataDude se penche sur le fichier refactorlog et la table dbo._Refactorlog pour déterminer quels refactors doivent être traitées contre la base de données.
Voici le code généré en utilisant ce cette procédure, le changement d'un nom de colonne qui a également été référencé dans une procédure stockée:
EXECUTE sp_rename @objname = N'[dbo].[Users].[TestF]', @newname = N'TestG', @objtype = N'COLUMN';
GO
PRINT N'Altering [dbo].[ListUsers]...';
GO
ALTER PROCEDURE [dbo].[ListUsers]
AS
SELECT [ID], [FirstName], [LastName], [TestG]
FROM Users
RETURN 0
GO
Keith
Autres conseils
Si la table est petite, vous pouvez créer une nouvelle table avec les colonnes correctes, puis insérer de la vieille table dans la nouvelle, en changeant les colonnes que vous allez.
Si la table est grande, et vous ne pouvez pas non plus le temps, RAM ou effort pour copier toute la table, vous pouvez
alter table add new_column
alors
update table set new_column=old_column
alors
alter table drop column old_column
.
La syntaxe est bien sûr simplifiée.
La façon dont les projets de base de données Visual Studio gèrent le schéma change se prête à ce genre de confusion. Il est très difficile pour VS de dire si vous avez simplement renommé une colonne (et doit conserver les données) ou retiré de la colonne et a ajouté un autre. Mon entreprise a travaillé pendant un certain temps sur un produit de contrôle de source de schéma de base de données qui avait toutes ces mêmes questions.
En fin de compte, je suis venu à croire que la meilleure façon de gérer les modifications du schéma est celui proposé par K. Scott Allen (référencé par Jeff Atwood) . Cette série d'articles devrait vous mettre sur une voie vers une meilleure solution de contrôle de version de base de données.