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

Posted

技术标签:

【中文标题】在 DACPAC 部署中使用 SQL 变量来区分权限【英文标题】:Use SQL variables in DACPAC deployment to differentiate permissions 【发布时间】:2021-01-31 06:38:18 【问题描述】:

我在 Azure 上有一个 SQL 数据库,并使用 .dacpac 文件使用 SqlPackage.exe 将任何架构更改部署到它。我希望对此进行修改,以便我可以使用 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];

但是,我在这个 IF 条件下遇到语法错误:

SQL46010: Incorrect syntax near (.

你能帮忙吗?如何在数据库上设置权限以取决于我引入的新变量?

谢谢!

【问题讨论】:

你现在解决了吗? 这能回答你的问题吗? Conditional Compilation of schema objects in SSDT Project 【参考方案1】:

对于字符串替换,变量需要用引号括起来:

IF ('$(DEPLOYMENTTYPE)' = 'production')
    ALTER ROLE [db_newprodrole] ADD MEMBER [newestprodmember];

【讨论】:

以上是关于在 DACPAC 部署中使用 SQL 变量来区分权限的主要内容,如果未能解决你的问题,请参考以下文章

Octopus - SQL 部署 DACPAC 社区贡献步骤

如何从 Azure DevOps DACPAC 部署中获取漂移报告?

azure 中的 Dacpac 部署将值称为无效的列名

如何在生成的 DACPAC 文件中包含 Sql Permission Statement

Visual Studio:使用 SQLCMD 变量在部署时更改数据库类型

使用 c# 提高 dacpac 部署的性能