问题描述
我在Azure上有一个SQL数据库,并使用SqlPackage.exe和.dacpac文件将所有架构更改部署到该数据库。我希望对此进行修改,以便可以根据部署的环境使用sql变量来控制架构中的某些更改。因此,在.sqlproj文件中,我添加了以下内容:
<ItemGroup>
<SqlCmdVariable Include="DEPLOYMENTTYPE">
<DefaultValue>
</DefaultValue>
<Value>$(SqlCmdVar__1)</Value>
</SqlCmdVariable>
</ItemGroup>
然后在.sql文件中设置安全性,我添加了如下条件:
CREATE ROLE [db_newprodrole]
AUTHORIZATION [dbo];
GO
IF ($(DEPLOYMENTTYPE) = 'production')
ALTER ROLE [db_newprodrole] ADD MEMBER [newestprodmember];
但是,在这种情况下,我遇到了语法错误:
SQL46010: Incorrect syntax near (.
能请你帮忙吗?如何在数据库上设置权限,以我引入的新变量为条件?
谢谢!
解决方法
对于字符串替换,变量需要用引号括起来:
IF ('$(DEPLOYMENTTYPE)' = 'production')
ALTER ROLE [db_newprodrole] ADD MEMBER [newestprodmember];