2016-03-23 81 views
0

此刻,我部署到服务器,并部署的一部分,从Visual Studio发布时,调用脚本,将用户添加到组:Visual Studio中 - 部署数据库 - 数据库参数

ALTER ROLE [geodeveloper] ADD MEMBER [OTWGEODI01\GEO Application Developers]; 

我使用的服务器称为OTWGEODI01

不过,我创建了一个新的发布配置文件指向OTWGEODI02 - 但上面的脚本失败,因为现在有成员OTWGEODI01\GEO Application Developers

有没有一种方法,我可以甲肝e作为发布的一部分,在脚本中更改此值的参数?

我试图添加属性到我的数据库解决方案,但添加一个名为ServerName的cariable。我将它设置为'OTWGEODI02'。然后我去到了直接引用服务器名称我的剧本之一:

ALTER ROLE [geodeveloper] ADD MEMBER [OTWGEODI01\GEO Application Developers]; 

,取而代之的是:

ALTER ROLE [geodeveloper] ADD MEMBER [[$(ServerName)\GEO Application Developers]; 

但它告诉我,我有一个无效的语法附近“\”

你能看到我犯的一个错误吗?另外,每次我需要发布到不同的环境时,我都需要去更新数据库属性?或者可以以某种方式基于我正在使用的.publish文件。 (我有一个每个数据库.publish文件)。也许我可以用一个发布文件结束,并以某种方式选择解决方案配置并在那里添加我的环境?

编辑:

结果在发布错误说:

SQL72014:.net SqlClient数据提供:消息15401,级别16,状态1, 线1的Windows NT用户或组“( $ ServerName)\ GEO Application Developers'not found。再次检查名称。

CREATE USER [($ServerName)\GEO Application Developers] FOR LOGIN [($ServerName)\GEO Application Developers]; 

它似乎没有替换变量...

另外:

CREATE USER [$(ServerName)\GEO Application Developers] FOR LOGIN [$(ServerName)\GEO Application Developers]; 

结果内置时间错误,说我不能把参数在这里。

回答

0

您可以在项目属性中定义变量(在SQLCMD变量选项卡中定义一个新变量)。然后你可以在你的脚本中使用这个变量(比如[$(ServerName)])。
发布时,您可以根据您希望发布到的服务器来设置不同的值。

+0

谢谢@Amit - 我只是试过,但得到一个奇怪的错误。我根据你的回答更新了我的问题。 – Craig

+0

这是在你的代码中丢失的''''。 – AKS

+0

再次想到,您还可以使用系统变量“@@ SERVERNAME”来获取服务器名称。然后你需要建立你的sql查询并执行它(我认为是动态查询)。 – AKS