如何在 Azure Pipeline 中使用 DACPAC 更新服务器上的数据库,而无需删除并重新创建数据库

How to update a database on server using a DACPAC in Azure Pipeline without dropping and recreating the database

提问人:Tahami Rizwan 提问时间:10/19/2023 最后编辑:Tahami Rizwan 更新时间:10/19/2023 访问量:94

问:

我有一个 SSDT (SQL Server Data Tools) 数据库项目,当我部署它时,它会删除并重新创建数据库/表/存储过程等。

我的方案是,我希望它不要删除数据库,而只更新已进行更改的存储过程或表。我想保持服务器上的现有表和其他对象完好无损。

例如,如果我只对一个表进行更改,则 DACPAC 应仅更新服务器上的该特定表,而不考虑任何其他差异,即使它们与源不匹配

我们通过 Azure 管道使用 DACPAC 文件进行部署。我怎样才能做到这一点?

sql-server azure-devops sql-server-data-tools dacpac

评论

0赞 Ivan Starostin 10/23/2023
显示 sqlproj 内容(配置选项,而不是 sql 文件)和用于部署的命令。

答:

0赞 Geezer 10/19/2023 #1

您可能已将 CreateNewDatabase 属性设置为True

它可以是命令行发布参数:

/p CreateNewDatabase=True

或者可以在发布 xml 文件中设置它:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    ... other properties ...
    <CreateNewDatabase>True</CreateNewDatabase>

或者在发布 UI(设置上述 XML 属性)中:

enter image description here

评论

0赞 Tahami Rizwan 10/19/2023
添加参数后,您建议从服务器中删除我的数据库并导致以下错误: 分析部署计划(完成) 更新数据库(开始) 正在回滚不合格的事务。估计回滚完成时间:0%。不合格的事务正在回滚。预计回滚完成:100%。正在创建 SSDT-Demo...执行批处理时发生错误。更新数据库(失败)
0赞 Geezer 10/20/2023
该属性是否已设置为 True,然后您将其更改为 ?CreateNewDatabaseFalse