Pergunta

Estou testando o novo projeto de banco de dados recursos do Visual Studio 2010 e deseja alterar o nome de uma coluna em uma tabela.Eu mudei o nome do script de criação e implantação de banco de dados.O script foi gerado apenas largou a coluna e adicionada uma nova coluna com o nome correto, mas todos os dados são perdidos.

Existe uma configuração que não vai largar a coluna de dados?

Eu estou procurando o "DataDude" solução para este problema.(Se houver)

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

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

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

GO

Obrigado, Keith

Foi útil?

Solução

Utilize a Vista de Esquema clicando em Exibir -> Esquema de Banco de dados modo de Exibição

Expanda as tabelas e suas colunas.

Botão direito do mouse na coluna e clique em Refactor -> Rename...

Altere o nome do Novo campo Nome com pré-Visualização de Mudança de caixa marcada.

Observe que ele não transforma apenas o nome da coluna, mas também os procedimentos armazenados que pode ser referência a coluna.

Dentro do projeto de Banco de dados um refactorlog arquivo é criado, que mostra a mudança de nome.

Quando o novo esquema implementado contra o banco de dados existente, parece que DataDude olha o refactorlog arquivo e a dbo._Refactorlog tabela para determinar qual refactors precisam ser processadas no banco de dados.

Aqui está o código é gerado usando esse procedimento, a alteração de um nome de coluna que também foi referenciado em um procedimento armazenado:

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

Outras dicas

Se a tabela for pequena, você poderá criar uma nova tabela com as colunas corretas e inserir da tabela antiga na nova, alterando as colunas à medida que avança.

Se a tabela for grande e você não pode pagar o tempo, o RAM ou o esforço para copiar a tabela inteira, você podealter table add new_column entãoupdate table set new_column=old_column entãoalter table drop column old_column.

É claro que a sintaxe é simplificada.

A maneira como os projetos de banco de dados do Visual Studio lidam com as mudanças de esquema se presta a esse tipo de confusão. É muito difícil para o Vs saber se você simplesmente renomeou uma coluna (e deve preservar os dados) ou remover a coluna e adicionar uma diferente. Minha empresa trabalhou por um bom tempo em um produto de controle de origem de esquema de banco de dados que tinha todos esses mesmos problemas.

No final, cheguei a acreditar que a melhor maneira de lidar com mudanças de esquema é a proposta por K. Scott Allen (referenciado por Jeff Atwood). Esta série de artigos deve definir você em um curso para uma melhor solução de controle de versão do banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top