#sql-server #dacpac #blue-green-deployment
#sql-сервер #dacpac #синий-зеленый-развертывание
Вопрос:
Я использую сине-зеленую стратегию развертывания с шаблоном базы данных expand contract. Для достижения этого в моей схеме развертывания базы данных я установил свойство BlockOnPossibleDataLoss=true, потому что на этапе расширения я могу изменять свою базу данных без каких-либо изменений перерыва в старой версии.
У меня был столбец, который больше не нужен, поэтому я выполнил эти шаги:
- Я изменил этот столбец, чтобы разрешить нулевые значения
- Тогда мои новые записи больше не заполняют этот столбец
- Я запустил скрипт, который установил значение null для этого столбца для всех записей таблицы
Теперь мне нужно удалить этот столбец, но даже со всеми записями с нулевым значением для этого столбца я не могу, потому что я получил эту ошибку:
Обнаружены строки. Обновление схемы завершается, поскольку может произойти потеря данных.’
Как я могу удалить этот столбец, даже используя BlockOnPossibleDataLoss=true?
Ответ №1:
- Создайте таблицу с новой схемой (без столбца, который вы не хотите удалять) с временным именем. Что-то вроде
tmp_YourTable
(не временная таблица) - Вставьте все данные из исходной таблицы во вновь созданную таблицу
- Удалите исходную таблицу
- Переименуйте новую таблицу в старое имя таблицы.
EXEC sp_rename 'tmp_YourTable', 'YourTable';