2014-09-03 4 views
27

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

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

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

Когда исполнения 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;  
+0

Возможный дубликат столбца [Разрешить (один раз) столбцов в проекте базы данных] (http://stackoverflow.com/questions/19031123/allow-once-column-drop-in-database-project) – drneel

+1

Исправлено удаление инкремента блока развертывание, если может произойти потеря данных, и я все равно получаю ту же ошибку – DRobertE

ответ

0

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

+0

Это не сработало .. все равно получите ту же ошибку – DRobertE

+0

Что происходит, когда вы создаете скрипт для выполнения этого действия? Можете ли вы опубликовать это или соответствующие разделы сценария, которые пытаются удалить столбец? Я делал такие вещи с SSDT раньше и не имел этой проблемы, если не была проверена возможность не допускать потери данных. –

+0

Устранить часть проблемы - это ограничение по умолчанию, помещенное в столбец ... Сначала я удалил его, а затем удалил столбец, и он сработал. Однако следующий вопрос: что, если это не ограничение по умолчанию, а какое-то другое. Есть ли способ отбросить ВСЕ ограничения для данного столбца? – DRobertE

44

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

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

Когда ты щелкните правой кнопкой мыши на проекте DB в VS, вы получите диалог «Опубликовать базу данных». Вы настраиваете соединение целевого сервера и выбираете правильную базу данных.

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

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

Нажмите на OK кнопку. Затем нажмите на кнопку Создать сценарий, чтобы сценарий публикации был сгенерирован.

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

23

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

  1. Перейти к Project Properties
  2. Вкладка Debug
  3. удалить проверка этого параметра «Блок добавочного развертывания, если потеря данных может произойти», как на картинке ниже

+0

Итак, можно ли управлять этим параметром как из свойств проекта, так и из настроек публикации? –

+0

Это не сработало для меня –

3

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

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

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

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

Смежные вопросы