在DACPAC部署中使用SQL变量来区分权限

问题描述

我在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];

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...