【问题标题】:Use SQL variables in DACPAC deployment to differentiate permissions在 DACPAC 部署中使用 SQL 变量来区分权限
【发布时间】: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 (.

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

谢谢!

【问题讨论】:

标签: sql azure-sql-database dacpac sqlpackage


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2013-01-15
    • 1970-01-01
    • 2018-03-16
    • 2018-08-28
    相关资源
    最近更新 更多