从Visual Studio 2013部署多个SSDT数据库项目

时间:2014-08-20 19:30:11

标签: visual-studio-2013 sql-server-data-tools

我有一个包含多个(6)数据库项目的解决方案,这些项目从Visual Studio数据库(.dbproj)项目转换为SQL Server数据工具(.sqlproj)项目。在Visual Studio 2013中,我可以成功构建每个数据库并将其一次发布到本地SQL Server实例一个

在Visual Studio 2010中,我能够部署解决方案,而后者又构建并部署了所有数据库。在Visual Studio 2013中,部署解决方案无效,即使所有项目都设置为为活动配置构建和部署。

如何从Visual Studio 2013构建和部署所有数据库?

2 个答案:

答案 0 :(得分:0)

如果这些数据库以某种方式相关并作为数据库引用引用,那么它们将作为一个连接的解决方案一起构建和部署。请考虑以下两种情况:

场景1: 您有一个包含四个数据库[A,B,C,D]的解决方案。 [A]参考[B,D]。 [D]参考[C]。如果您使用数据库引用将它们添加为已连接的数据库并尝试部署A,则将构建和部署所有这些数据库。

场景2: 您有一个包含四个数据库[A,B,C,D]的解决方案。 [A]参考[B,D]。如果使用数据库引用将它们添加为已连接的数据库并尝试部署A,则只会构建和部署[A,B,D]。 [C]是解决方案中的孤立项目(实际上它不应该在该解决方案中),并且解决方案不会构建或部署它。

答案 1 :(得分:0)

我知道可能会迟到,但是......

我们使用这种方式:

  1. 根据需要调整现有sqlproj中的数据库引用。

  2. 只需创建另一个项目(种类为“lalala_Deploy”),并使用Database location ==“Same database”添加所有项目作为参考。

  3. 部署“部署”项目。

  4. 因此,您的项目将根据其数据库引用进行构建,然后部署到单个DB。

    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个字符串,但是对于你来说,你必须为每个项目添加。发布配置文件mast为所有项目分开,因为它们包含数据库名称。