Развертывание нескольких проектов базы данных SSDT из Visual Studio 2013

У меня есть решение с несколькими (6) проектами базы данных, которые были преобразованы из проектов базы данных Visual Studio (.dbproj) в проекты инструментов данных SQL Server (.sqlproj). В Visual Studio 2013 я могу успешно создавать и публиковать каждую из баз данных в своем локальном экземпляре SQL Server по одной за раз.

В Visual Studio 2010 я смог развернуть решение, которое, в свою очередь, создало и развернуло все базы данных. В Visual Studio 2013 развертывание решения ничего не дает, несмотря на то, что все проекты настроены как на сборку, так и на развертывание для активной конфигурации.

Как создать и развернуть все базы данных из Visual Studio 2013?


person David Wilson    schedule 20.08.2014    source источник


Ответы (2)


Если эти базы данных каким-то образом связаны и на них ссылаются как на базы данных, они будут созданы и развернуты вместе как одно связанное решение. Рассмотрим следующие два сценария:

Сценарий 1. У вас есть решение, содержащее четыре базы данных [A, B, C, D]. [A] ссылается на [B, D]. [D] ссылается на [C]. Если вы добавили их как подключенные базы данных, используя ссылки на базы данных, и попытались развернуть A, все они будут построены и развернуты.

Сценарий 2. У вас есть решение, содержащее четыре базы данных [A, B, C, D]. [A] ссылается на [B, D]. Если вы добавили их как подключенные базы данных с помощью ссылок на базы данных и попытались развернуть A, будут созданы и развернуты только [A, B, D]. [C] является проектом-сиротой в решении (и на самом деле его не должно быть в этом решении), и он не будет создан или развернут решением.

person Ebeid ElSayed    schedule 18.11.2014

Я понимаю, что может быть поздно, но...

Мы используем этот способ:

  1. Настройте ссылки на базу данных в существующем sqlproj по мере необходимости.

  2. Просто создайте еще один проект (вроде "lalala_Deploy") и добавьте все существующие в качестве ссылок с помощью Database location == "Same database".

  3. Разверните проект «Развернуть».

В результате ваши проекты будут построены в соответствии с их ссылками на базы данных, а затем развернуты в одной БД.

upd 28.03.2017 17:37: В 2013 году мы использовали cdm с командной строкой msbuild и публиковали профили. Вот эти коды:

Пример CMD:

%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe .\ProjectName\ProjectName.sqlproj /t:Build;Publish /p:Configuration=Release /p:SqlPublishProfilePath=ProjectName_local.publish.xml /consoleloggerparameters:Summary /verbosity:normal /l:FileLogger,Microsoft.Build.Engine;logfile=OmniUS_Build.log;append=false

Вот пример публикации профиля:

"<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>False</IncludeCompositeObjects>
    <TargetDatabaseName>ProjectName</TargetDatabaseName>
    <DeployScriptFileName>ProjectName.publish.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=.\SQL2014;Integrated Security=True;Pooling=False</TargetConnectionString>
    <ScriptDatabaseOptions>True</ScriptDatabaseOptions>
    <BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
    <IncludeTransactionalScripts>False</IncludeTransactionalScripts>
    <CreateNewDatabase>True</CreateNewDatabase>
    <DropObjectsNotInSource>False</DropObjectsNotInSource>
    <AllowDropBlockingAssemblies>True</AllowDropBlockingAssemblies>
    <GenerateSmartDefaults>True</GenerateSmartDefaults>
    <IgnoreFillFactor>False</IgnoreFillFactor>
    <IgnoreFilegroupPlacement>False</IgnoreFilegroupPlacement>
    <IgnorePermissions>True</IgnorePermissions>
    <IgnoreObjectPlacementOnPartitionScheme>False</IgnoreObjectPlacementOnPartitionScheme>
    <IgnoreRoleMembership>True</IgnoreRoleMembership>
    <BlockWhenDriftDetected>False</BlockWhenDriftDetected>
    <RegisterDataTierApplication>False</RegisterDataTierApplication>
    <DisableAndReenableDdlTriggers>False</DisableAndReenableDdlTriggers>
    <IgnoreIndexPadding>False</IgnoreIndexPadding>
    <IgnoreKeywordCasing>True</IgnoreKeywordCasing>
  </PropertyGroup>
  <ItemGroup>
    <SqlCmdVariable Include="N_Period">
      <Value>201410</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>"

В примере с cdm я оставил 1 строку, но в вашем случае вам нужно добавлять для каждого вашего проекта. Профили публикации должны быть разделены для всех проектов, поскольку они содержат имя БД.

person JGooLaaR    schedule 13.03.2017
comment
Спасибо, что нашли время изучить это, но я не пытаюсь развернуть несколько проектов в одной базе данных. Скорее, я хочу развернуть несколько проектов базы данных SSDT, каждый в своей собственной базе данных, как одну операцию (из Visual Studio). - person David Wilson; 24.03.2017
comment
@ Дэвид, я полагаю, что сценарий cmd - лучший способ. - person JGooLaaR; 28.03.2017
comment
@DavidWilson, я только что отредактировал свой ответ, потому что комментарий не допускает такой длины. - person JGooLaaR; 28.03.2017
comment
Мне может потребоваться некоторое время, чтобы попробовать ваше решение, но в конце концов я свяжусь с вами. Спасибо тебе за твое терпение! - person David Wilson; 29.03.2017
comment
@DavidWilson, ТАКЖЕ, вы можете использовать TeamCity для развертывания своих БД (бесплатно для ‹ 20 конфигураций сборки). ;) - person JGooLaaR; 31.03.2017