SSDT - Как изменить имена объектов базы данных для конфигурации сборки - PullRequest
0 голосов
/ 05 июля 2018

Проблема:

Я хочу управлять своими базами данных, используя один проект базы данных SSDT. в котором я хочу централизовать разработку баз данных и автоматизировать развертывания (в основном, хранимые процедуры). В многопользовательской среде, где именам объектов предшествуют названия компаний, пример:

[dbo]. [Spu_COMPANY_NAME $ Имя хранимой процедуры]

у нас есть центральная база данных, в которой мы занимаемся разработкой, и каждый раз, когда мы публикуем, мы делаем «Заменить все» на название компании.

Переменные SQLCMD не подойдут, потому что они не могут быть включены в имена объектов. Есть ли способ, которым я могу построить так, чтобы для каждой конфигурации сборки я получал индивидуальные хранимые процедуры во время сборки / публикации, я получал структуру папок, подобную этой:

--Database.Project/
  --bin/
     --CompanyA(build.companyA.congig)/
     --CompanyB(build.companyB.congig)/

1 Ответ

0 голосов
/ 10 июля 2018

Как упомянул @PeterSchott в предыдущем комментарии, решение легко реализовать с помощью сценариев Powershell и событий сборки до / после в Visual Studio.

Я выложу ответ здесь на тот случай, если кому-то понадобится его для справки (или, может быть, на случай, если он мне понадобится)


Первый:

Предварительно соберите скрипт powershell, он берет каталог проекта и заменяет все строки на 'COMPANY_NAME' на фактическое название компании в зависимости от конфигурации сборки для всех файлов с расширением .sql.

enter image description here

Далее:

Скрипт powershell:

if ($args[0] -eq "Release"){
    $company_name = "ReleaseCorp";
}

$dboDir = $args[1] + 'dbo\';

$sqlFiles = Get-ChildItem $dboDir -rec | Where-Object {($_.Extension -eq ".sql")}

foreach ($file in $sqlFiles)
{
    echo $file;
    (Get-Content $file.PSPath) |
    Foreach-Object { $_ -replace "COMPANY_NAME", $company_name } |
    Set-Content $file.PSPath
}

Событие после сборки выполняет обратное, только на этот раз оно берет фактическое название компании для конфигурации и возвращает его в токен для будущих сборок.

Стоит отметить, что для того, чтобы Visual Studio могла запускать сценарии Powershell (x86), следующий шаг является обязательным:

Запустите Windows Powershell (x86) в режиме администратора и выполните:

набор-исполнение политики неограниченно

Больше информации об этом можно найти в информативном блоге Дэвида Фретта: Создание событий до и после сборки Powershell для проектов Visual Studio

...