【问题标题】:SqlAzureDacpacDeployment yaml queriesSqlAzureDacpacDeployment yaml 查询
【发布时间】:2022-01-04 15:39:30
【问题描述】:

我继承了一个用于 dacpac 部署的 YAML 文件。 DB 部分的第一部分使用 SqlAzureDacpacDeployment,如下所示:

task: SqlAzureDacpacDeployment@1
  displayName: 'Generate CL-${{ parameters.environmentDisplayName }} SQL Migration Script'
  inputs:
    azureSubscription: ##
    authenticationType: ##
    serverName: ##
    databaseName: ##
    sqlUsername: ##
    sqlPassword:##
    deployType: **DacpacTask**
    deploymentAction: **Script**
    dacpacFile: $(Pipeline.Workspace)/Database/ContentLibrary.dacpac

它获取 dacpac 文件,然后从中创建一个 tsql 脚本。所以我假设构建数据库架构所需的 sql 脚本

然后有一个像这样的第二个 yaml 部分:

- task: SqlAzureDacpacDeployment@1
  displayName: 'Deploy CL-${{ parameters.environmentDisplayName }} SQL Migration Script'
  inputs:
    azureSubscription: ##
    authenticationType: ##
    serverName: ##
    databaseName: ##
    sqlUsername: ##
    sqlPassword: ##
    deployType: **DacpacTask**
    deploymentAction: **Publish**
    dacpacFile: $(Pipeline.Workspace)/Database_Migration_${{ parameters.environmentDisplayName }}/ContentLibrary.dacpac

然后这个应该将 tsql 公开到目标上,并在需要时创建内容或更新所需的位。

它所做的只是覆盖已经存在的内容,因此如果已经存在架构,那么所有约束都会引发很多错误。

我该如何修改这段代码,以便它进行更新(使数据库与 dacpac 保持同步,或者在需要时创建完整的东西,而不仅仅是在东西已经存在时覆盖)?

是因为文件的位置吗?即每段代码中的 DacpacFile 部分?

【问题讨论】:

    标签: azure-devops yaml dacpac


    【解决方案1】:

    SQL 数据库中的约束是动态命名的(即不带名称定义)还是在表定义中添加静态名称 - 如果未命名,则使用 sqlpackage.exe 进行更新,DACPAC 会尝试删除并重新创建它们.

    如果您不能在表格中定义它们,那么您可以添加不删除它们的选项 /p:DropConstraintsNotInSource=False

    参考: https://docs.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-publish?view=sql-server-ver15

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多