Подтвердить что ты не робот

Папка удаления базы данных Visual Studio 2013

Кто-нибудь знает, как лучше всего удалить существующий столбец из базы данных, когда в datatable есть строки данных.

То, что я пробовал, похоже, не хочет работать. Я включил предварительное развертывание script в проект базы данных, который делает

GO
if exists(select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'Mercury.dbo.Discounts' and COLUMN_NAME = 'ColumnToRemove')
BEGIN
    ALTER TABLE Database.dbo.Table1 Drop Column ColumnToRemove
END
GO

Затем в script, который создал таблицу в первую очередь, я удалил соответствующий столбец из таблицы Create Script

Когда выполнение dacpac было выполнено, я получаю следующее

Initializing deployment (Start)
*** The column [dbo].[Table1].[ColumnToRemove] is being dropped, data loss could occur.
Initializing deployment (Complete)
Analyzing deployment plan (Start)
Analyzing deployment plan (Complete)
Updating database (Start)
An error occurred while the batch was being executed.
Updating database (Failed)
*** Could not deploy package.
Warning SQL72015: The column [dbo].[Table1].[ColumnToRemove] is being dropped, data loss could occur.
Error SQL72014: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line 6 Rows were detected. The schema update is terminating because data loss might occur.
Error SQL72045: Script execution error.  The executed script:
IF EXISTS (SELECT TOP 1 1
           FROM   [dbo].[Table1])
    RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127)
        WITH NOWAIT;    
4b9b3361

Ответ 1

Я знаю, что это старый поток, но я столкнулся с этим, когда сталкивался с одной и той же проблемой. Кто-то может по-прежнему пользоваться преимуществами.

Вот что сработало для меня:

При щелчке правой кнопкой мыши по проекту БД в VS вы получаете диалоговое окно "Публикация базы данных". Вы настраиваете соединение целевого сервера и выбираете правильную базу данных.

Затем нажмите кнопку "Дополнительно...", чтобы открыть "Расширенные настройки публикации".

1) Uncheck - 'Block incremental deployment if data loss might occur' checkbox.
2) Check - 'DROP objects in target but not in project'

Нажмите кнопку OK. Затем нажмите кнопку Generate Script, чтобы опубликовать публикацию script.

Вы можете сохранить эти настройки в файле профиля, если вы хотите часто генерировать script.

Ответ 2

Вам нужно изменить свойства проекта базы данных

  • Перейти к Свойствам проекта
  • Отладка
  • удалить эту опцию "Блокировать инкрементное развертывание, если может произойти потеря данных", как на рисунке ниже

Ответ 3

В моей ситуации...

Использование Schema Compare в Visual Studio 2015. После открытия окна Schema Compare:

  • Параметры сравнения схем (значок маленькой шестерни в полосе меню).
  • Перейдите на вкладку Общие.
  • Снимите флажок "Блокировать возможную потерю данных"

Это не проверяется на время сеанса. Я не подтвердил, проверяется ли он, когда вы выходите из сеанса.

Ответ 4

Вам нужно сделать это только один раз в проекте (не в предварительном развертывании script), и при публикации вы должны будете сделать это с возможностью "позволить потерю данных". Я не вижу пути потери данных, если вы удаляете столбец. Вы всегда можете изменить эту настройку, как только это будет сделано.