Я использую DBDeploy.NET для управления изменениями в моей кодовой базе T-SQL.DBDeploy работает разработчиком и поддерживает нумерованный набор сценариев изменений.Когда развертывание запускается (через NAnt), DBDeploy просматривает таблицу журнала изменений и определяет, какие исправления необходимо выполнить, чтобы обновить экземпляр.
У меня проблема с установкой необходимых параметров, необходимых длясоздать индексированное представление.QUOTED_IDENTIFIER, ANSI_NULLS и ARITHABORT должны быть включены.Да, я могу легко поместить эти операторы SET в начало скрипта изменения, который создает / изменяет индексированное представление.Но эти настройки являются уровнем соединения.Что если позже я создаю новый экземпляр с нуля?Когда я запускаю DBDeploy на новом экземпляре, эти параметры будут перетекать во все последующие сценарии изменений, поскольку все сценарии изменений эффективно объединяются в окончательный сценарий SQL, который выполняется на одном соединении.Что еще хуже, это параметры разбора, такие как QUOTED_IDENTIFIER, которые также применяются ко всем сценариям изменений ранее.Итак:
- Я нахожусь на SQL Server 2000. Правильна ли моя интерпретация настроек уровня соединения?Т.е. использование GO для разбиения скрипта на пакеты не ограничивает область действия этих параметров SET.Как насчет более поздних версий, где настройки уровня соединения были переименованы в пакетный уровень?
- Есть ли способ отменить установку SET?Насколько я понимаю, настройки на уровне соединения являются тройными - то есть ON, OFF и default, где default интерпретируется на основе содержимого оператора SQL, настроек экземпляра, настроек базы данных и постоянных пользовательских настроек.Если я установил что-либо на ON, я не могу отменить это, просто отменив это, установив это на OFF, потому что это маскирует значение по умолчанию, если это было то, что было раньше.
- Есть ли способ сохранить состояниенастройки уровня соединения до ее установки, так что я могу вручную восстановить ее после?
Альтернативы отстой:
- Я могу обернуть каждый оператор create / alter для индексированногопредставления в динамическом SQL - с ограничением 4000/8000 символов на SS2K.Это очень хорошо ограничит область действия операторов SET.
- Я могу установить политику исправления параметров SET, которые будут использоваться на уровне проекта, и требовать от всех разработчиков размещать эти параметры SET в верхней части каждого изменения.Сценарий для его применения, так как до времени развертывания точно не известно, какие сценарии изменения будут применены.
- Я могу установить исправление для самого DBDeploy, чтобы всегда использовать новое подключение для каждого сценария изменения, но для этого потребуется изменить способ его измененияобрабатывает отмененные сценарии изменений.
Итак, что можно сделать и что мне делать?