Я хочу переключиться на DACPAC для наших изменений в базе данных, но я немного в недоумении, что делать, когда дело доходит до более сложных обновлений баз. Чтобы проиллюстрировать, что я имею в виду, позвольте мне использовать простой пример, который имеет ту же проблему.Пакет DACPAC со сложными изменениями
Скажите, что у меня есть таблица Customer, которая в настоящее время работает, и я хочу добавить новую таблицу CustomerType с внешним ключом от Customer to CustomerType. Новый столбец в Клиенте должен быть необходим (не может быть нулевым), но не должен иметь значение по умолчанию.
Я хочу использовать произвольную формулу для установки начального типа для существующих клиентов при обновлении. Как я могу выполнить это с помощью DACPAC?
DACPAC будет знать только, что есть новый столбец и попытается добавить его в таблицу Customer, которая, конечно же, потерпит неудачу, потому что это необходимо. Установка значения по умолчанию нежелательна, так как это позволяет использовать нулевые значения.
Поскольку DACPAC должен быть доступен для обновления от каждого состояния до последнего, я не вижу, какую конфигурацию или сценарии до/после, которые я должен настроить, чтобы сделать эту работу.
Различные поиски дали неутешительный недостаток полезных результатов :(
Я надеюсь, что кто-то здесь может помочь. Спасибо заранее.
Ну, я хотел бы иметь возможность использовать DACPAC как «конечное состояние», как он предназначен, но с некоторым контролем над переходами между состояниями. Наличие сценария пост-развертывания, который изменяет значение nullability столбца, означает, что любое сравнение между DACPAC и полностью обновленной базой данных будет по-прежнему давать изменения (а именно, столбец, который не может быть нулевым, но должен быть нулевым в соответствии с «окончательным состояние ", которое находится в DACPAC) – Robba
Согласен, это несовершенно. Мы (команда SSDT) хотели бы улучшить эти сценарии, но впереди впереди другие приоритеты (например, добавление порядка столбцов игнорирования). –
Я думал, что fk будет отключен до тех пор, пока не будет запущен скрипт пост-развертывания, чтобы вы могли настроить данные в пост-развертывании (сделать его re-runnable/idempotent, например, где new_col = null), и столбец будет добавлен без ограничения, post deploy запускает и обновляет столбец, и, наконец, ограничения включаются в конце обновления ?? –