Проект базы данных VS 2010 сбрасывает данные об изменении имени столбца - PullRequest
4 голосов
/ 10 июня 2010

Я тестирую новые возможности проекта базы данных Visual Studio 2010 и хочу изменить имя столбца в таблице. Я изменил имя в скрипте создания и развернул его в базе данных. Сгенерированный скрипт просто отбросил столбец и добавил новый столбец с правильным именем, но все данные были потеряны.

Есть ли параметр, который не будет сбрасывать данные столбца?

Я ищу решение DataDude для этой проблемы. (Если есть)

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

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

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

GO

Спасибо, Кит

Ответы [ 3 ]

7 голосов
/ 10 июня 2010

Используйте представление схемы, нажав Вид -> Представление схемы базы данных

Разверните таблицы и их столбцы.

Щелкните правой кнопкой мыши столбец и выберите Refactor -> Rename ...

Измените имя в поле «Новое имя», установив флажок «Просмотреть изменения».

Обратите внимание, что оно меняет не только имя столбца, но и хранимые процедуры, которые могут ссылаться на этот столбец.

Внутри проекта базы данных создается файл refactorlog, который показывает изменение имени.

Когда новая схема развернута в существующей базе данных, кажется, что DataDude просматривает файл refactorlog и таблицу dbo._Refactorlog, чтобы определить, какаярефакторы должны быть обработаны для базы данных.

Вот код, сгенерированный с помощью этой процедуры для изменения имени столбца, на который также ссылалась хранимая процедура:

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

1 голос
/ 10 июня 2010

То, как проекты баз данных Visual Studio обрабатывают изменения схемы, приводит к такой путанице. Для VS очень сложно определить, переименовали ли вы столбец (и должны ли сохранить данные) или удалили столбец и добавили другой. Моя компания довольно долго работала над продуктом управления исходным кодом схемы базы данных, у которого были все те же проблемы.

В конце концов, я пришел к выводу, что лучший способ обработки изменений схемы - это предложенный K. Скотт Аллен (упоминается Джеффом Этвудом) . Эта серия статей должна направить вас к лучшему решению для управления версиями базы данных.

1 голос
/ 10 июня 2010

Если таблица небольшая, вы можете создать новую таблицу с правильными столбцами, а затем вставить из старой таблицы в новую, меняя столбцы по мере продвижения.

Если таблица большая,и вы не можете позволить себе ни время, ни оперативную память, ни усилие скопировать всю таблицу, вы можете alter table add new_column, затем update table set new_column=old_column, затем alter table drop column old_column.

Синтаксис, конечно, упрощен.

...