Развертывание нескольких файлов dacpac в одной базе данных

Я хочу автоматизировать развертывание моей базы данных на нашем сервере CI. Я написал сценарий PowerShell для развертывания файла dacpac в базе данных на сервере sql. Но теперь я нахожусь в странном положении, когда у меня есть два отдельных файла dacpac и я хочу развернуть их в единой базе данных (я не могу использовать один dacpac из-за нашей разработки программного обеспечения). Если я разверну их один за другим, он удалит объекты, созданные из первого dacpac. Так что любая помощь здесь приветствуется.

Если есть другие способы объединить два файла dacpac и развернуть их с помощью каких-либо команд или сценариев, ответьте на свои предложения.

Я использую приведенный ниже сценарий PowerShell для развертывания одного dacpac в базе данных.

$sqlPackagePath = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll";
$sqlServer = "localhost";
$dacpacPath = "mydatabase.dacpac"
$database = "TestDatabase"

add-type -path $sqlPackagePath
$dacService = new-object Microsoft.SqlServer.Dac.DacServices "server=$sqlServer"
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpacPath)
$dacService.deploy($dp, $database, "True")

person Sunil Buddala    schedule 04.05.2017    source источник
comment
что, если вы развертываете первый, а затем второй. Это перезапись ?? Или это удовлетворяет вашу потребность. тогда мы можем придумать некоторую логику для этого   -  person Ranadip Dutta    schedule 05.05.2017
comment
да, он удалит объекты, созданные первым dacpac, и оставит объекты только во втором dacpapc. Но я хочу сохранить и то, и другое. Я могу создавать всю новую базу данных каждый раз, поскольку она используется только для интеграционного тестирования, и мне каждый раз приходится начинать со свежего экземпляра.   -  person Sunil Buddala    schedule 05.05.2017
comment
тогда почему бы вам не создать два отдельных объекта и не развернуть их в одной базе данных. запустите foreach с двумя dacpac и просто разверните его,   -  person Ranadip Dutta    schedule 05.05.2017


Ответы (1)


По умолчанию при публикации dacpac лишние объекты не удаляются. Есть параметр, который вы должны явно выбрать для включения этого поведения (он называется «отбрасывать объекты не в исходный код» и по умолчанию ложен).

Однако вы используете старую (SQL Server 2012) версию Microsoft.SqlServer.Dac для выполнения этой операции, поэтому, возможно, поведение этой версии отличается от более новых версий.

Последняя версия платформы приложений уровня данных (Microsoft.SqlServer.Dac) доступна здесь: https://www.microsoft.com/en-us/download/details.aspx?id=55088

После установки новая версия Microsoft.SqlServer.Dac будет находиться в Microsoft SQL Server \ 140 \ DAC \ bin

person Steven Green    schedule 05.05.2017