具有可变替换的Visual Studio 2012数据库部署

时间:2014-06-19 15:06:08

标签: visual-studio-2012 deployment database-project

我是第一次在visual studio中为几个相关数据库设置部署的过程。目前我有三个数据库,我称之为Database1,Database2和Database3。这些数据库具有多个级别的部署(开发,测试,登台和生产)。

因此,对于Database1,我有4个发布配置:

  Database1_ToDevelopment.publish.xml
  Database1_ToTest.publish.xml
  Database1_ToStaging.publish.xml
  Database1_ToProduction.publish.xml

生产存放在它自己的服务器上,数据库实际上被称为" Database1_production"。测试和暂存共享服务器,数据库被调用" Database1_test"和" Database1_staging"。开发是在它自己的服务器上,并称为" Database1_development"。

我的问题是:同义词。

This answer is almost useful, but not quite

Database1_development可能包含:

CREATE SYNONYM [dbo].[syn_mytable] FOR [Database2_development].[dbo].[mytable]

我无法接受同义词并将其从开发转移到测试。我需要替换" _development"部分用于" _test"。这基于部署。

我想我想知道的是如何根据部署获得变量替换。


当然,我部分回答了我自己的问题。我发现这个图像正是我想要的但没有解释为什么这个对话框有这个部分(没有解释,所以没有链接)。该对话框看起来很熟悉,但VSQ中的SQLCMD变量部分并不存在。

enter image description here

事实证明,除非您编辑发布配置文件的XML文件以添加以下内容,否则对话框的这一部分将无法显示:

    <ItemGroup>
        <SqlCmdVariable Include="DBLevel">
           <Value>Dev</Value>
        </SqlCmdVariable>
    </ItemGroup>

我通过this SO问题找到了这个问题,然后是Jamie Thomson的blog post

下次再次打开发布对话框时会神奇地出现。

然后在同义词定义中我可以说:

CREATE SYNONYM [dbo].[syn_mytable] FOR [Database2_$(DBLevel)].[dbo].[mytable]

这主要是我想要的。

1 个答案:

答案 0 :(得分:0)

变通方法解决方案将使用来自MsBuild Community Tasks lib或任何其他任务库的ExecuteSQL或ExecuteDDL任务来创建特定于环境的别名,作为构建过程的一部分(例如,建立活动)。这样,您可以将数据库名称存储为MSBuild属性。