在 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 部署中获取漂移报告?
如何在生成的 DACPAC 文件中包含 Sql Permission Statement