Domanda

sto testando le nuove caratteristiche del progetto di database di Visual Studio 2010 e vuole cambiare il nome di una colonna in una tabella. Ho cambiato il nome nel creare sceneggiatura e schierato contro la base di dati. Lo script che è stato generato appena lasciato la colonna e ha aggiunto una nuova colonna con il nome corretto, ma tutti i dati sono stati persi.

C'è un'impostazione che non rilasciare i dati di colonna?

Sto cercando la soluzione "DataDude" a questo problema. (Se c'è una)

PRINT N'Altering [dbo].[Users]...';

GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];

GO
ALTER TABLE [dbo].[Users]
    ADD [Testn] NVARCHAR (50) NULL;

GO

Grazie, Keith

È stato utile?

Soluzione

utilizzare lo schema View facendo clic su Visualizza -> Database Schema Visualizza

Espandi le tabelle e le sue colonne.

Fare clic destro la colonna e fare clic su Refactor -> Rinomina ...

Cambia il nome nel campo Nuovo nome con anteprima Cambiamenti casella selezionata.

Avviso cambia non solo il nome della colonna, ma anche le stored procedure che possono essere riferimento a quella colonna.

All'interno del progetto di database viene creato un file refactorlog che mostra il cambio di nome.

Quando il nuovo schema è schierato contro il database esistente, sembra che guarda DataDude presso il file refactorlog e la tabella per determinare quale dbo._Refactorlog refactors devono essere elaborati nel database.

Ecco il codice che ha generato utilizzando questa procedura il cambiamento di un nome di colonna che è stato anche fatto riferimento in una stored procedure:

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

Altri suggerimenti

Se la tabella è di piccole dimensioni, è possibile creare una nuova tabella con le colonne corrette, e quindi inserire dalla vecchia tabella in quella nuova, cambiando le colonne, come si va.

Se la tabella è grande, e non può permettersi né il tempo, la RAM, o tentativo di copiare l'intera tabella, è possibile alter table add new_column poi update table set new_column=old_column poi alter table drop column old_column.

La sintassi è ovviamente semplificata.

Il modo in cui Visual Studio Progetti di database gestire lo schema cambia si presta a questo tipo di confusione. E 'molto difficile per VS dire se semplicemente rinominato una colonna (e dovrebbe conservare i dati) o la rimozione della colonna e ha aggiunto un altro. La mia azienda ha lavorato per un po 'di tempo su un prodotto di controllo di origine schema del database che ha avuto tutti questi stessi problemi.

Alla fine, sono venuto a credere che il modo migliore per gestire le modifiche dello schema è quello proposto da K. Scott Allen (a cui fa riferimento Jeff Atwood) . Questa serie di articoli dovrebbe impostare su un percorso verso una soluzione versione del database di controllo migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top