SSDT — автоматизация предварительной сборки — установка флагаBuildAction для хранимой процедуры

#sql-server-data-tools

#sql-server-data-tools

Вопрос:

Мне интересно, есть ли у кого-нибудь пример установки события предварительной сборки (свойства проекта, события сборки) в проекте SSDT, чтобы мы могли изменить действие сборки файлов с ‘build’ на None с учетом конфигурации проекта.

Что-то вроде: если $configuration равно x, тогда установите BuildAction = ‘none’ на abc.sql, иначе установите BuildAction = ‘build’

С уважением

Комментарии:

1. Нет, это не может быть сделано именно так. Если вы опишете свою проблему, может быть просто другое ее решение

2. Две сохраненные процедуры с одинаковыми именами, но разные реализации, основанные на таблицах среды, отличаются. В настоящее время необходимо вручную пометить как сборку, но хотите автоматизировать.

Ответ №1:

Если у вас разные реализации одной и той же хранимой процедуры, то у вас, вероятно, будет 2 варианта:

  • Создайте условную логику внутри SP. Вам нужно будет определить значение переменной при публикации, и в коде у вас будет что-то вроде:
     IF ('$(EnvVar)' = 'PROD')
    BEGIN
       -- code needed to be executed in PROD
    END
    IF ('$(EnvVar)' = 'DEV')
    BEGIN
       -- code needed to be executed in DEV
    END
  
  • Создайте 2 (или, возможно, потребуется больше) проекта, в которых будет эта одна процедура (или набор объектов) с разными реализациями. Затем добавьте ссылку на ваш основной проект с опцией «Та же база данных». Затем создайте разные профили публикации в проектах и используйте там правильные строки подключения.

Комментарии:

1. Привет, спасибо за ответ. Это то, что я пробовал — проблема в том, что он не создавал / компилировал, поскольку таблицы в одной среде не существуют в другой (сохраненные процедуры используются как интерфейсы с разными реализациями). Другая попытка заключалась в использовании сценария после развертывания и условного включения — однако я столкнулся с проблемой с пакетными операторами.

Ответ №2:

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

Я мог бы также использовать файл .tt для создания хранимой процедуры во время сборки.