【发布时间】:2014-06-19 15:06:08
【问题描述】:
我第一次在 Visual Studio 中为多个相关数据库设置部署。目前,我有三个数据库,分别称为 Database1、Database2 和 Database3。这些数据库具有多个部署级别(开发、测试、登台和生产)。
所以对于 Database1,我有 4 个发布配置:
Database1_ToDevelopment.publish.xml
Database1_ToTest.publish.xml
Database1_ToStaging.publish.xml
Database1_ToProduction.publish.xml
Production 位于它自己的服务器上,数据库实际上称为“Database1_production”。 Test 和 Staging 共享一个服务器,数据库称为“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”。这是基于部署的。
我想我想知道的是如何根据部署获取变量替换。
当然,然后我部分回答了我自己的问题。我发现这张图片正是我想要的,但没有解释为什么这个对话框有这个部分(没有解释,所以没有链接)。该对话框看起来很熟悉,但 VS 2012 中没有 SQLCMD 变量部分。
事实证明,这部分对话框不会显示,除非您编辑发布配置文件的 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]
这是我最想要的。
【问题讨论】:
-
很确定您在项目属性中定义了变量。然后,您将这些值放入您的发布配置文件中。我们已经将这些用于链接服务器和硬编码在我们的一些遗留存储过程中的不同文件路径之类的东西。不过,这正是我建议的解决方案。
标签: visual-studio-2012 deployment database-project