Не удается удалить столбец только с нулевыми значениями, когда BlockOnPossibleDataLoss=true

#sql-server #dacpac #blue-green-deployment

#sql-сервер #dacpac #синий-зеленый-развертывание

Вопрос:

Я использую сине-зеленую стратегию развертывания с шаблоном базы данных expand contract. Для достижения этого в моей схеме развертывания базы данных я установил свойство BlockOnPossibleDataLoss=true, потому что на этапе расширения я могу изменять свою базу данных без каких-либо изменений перерыва в старой версии. введите описание изображения здесь

У меня был столбец, который больше не нужен, поэтому я выполнил эти шаги:

  1. Я изменил этот столбец, чтобы разрешить нулевые значения
  2. Тогда мои новые записи больше не заполняют этот столбец
  3. Я запустил скрипт, который установил значение null для этого столбца для всех записей таблицы

Теперь мне нужно удалить этот столбец, но даже со всеми записями с нулевым значением для этого столбца я не могу, потому что я получил эту ошибку:

Обнаружены строки. Обновление схемы завершается, поскольку может произойти потеря данных.’

Как я могу удалить этот столбец, даже используя BlockOnPossibleDataLoss=true?

Ответ №1:

  1. Создайте таблицу с новой схемой (без столбца, который вы не хотите удалять) с временным именем. Что-то вроде tmp_YourTable (не временная таблица)
  2. Вставьте все данные из исходной таблицы во вновь созданную таблицу
  3. Удалите исходную таблицу
  4. Переименуйте новую таблицу в старое имя таблицы. EXEC sp_rename 'tmp_YourTable', 'YourTable';