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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top