在 SQL Server 部署中使用 DACPAC 有哪些限制

问题描述

我正在探索 sql Server 数据库部署中的 DACPAC 功能

我正在使用 EXTRACT 操作获取从源生成的 DACPAC,并使用 PUBLISH 操作将其部署到目标。

提取

sqlpackage.exe /Action:Extract /SourceDatabaseName:%sourcedatabaseName% /SourceServerName:%sourceserverName% /TargetFile:%FilePath%

发布

sqlpackage.exe /Action:Publish /SourceFile:%sourceFile% /TargetServerName:%serverName% /TargetDatabaseName:%databaseName%

在这里,当我在进行 DACPAC 部署时在源表中引入了新列时,它工作正常。新列反映在目标中。

但是,当我删除源中的列并进行 DACPAC 部署时,不会反映更改。该列未落入目标中。是因为我在那一列有数据吗?

在另一种情况下,我在源中有一些测试表和测试存储过程,当我生成 DACPAC 并进行部署时,相同的测试表和存储过程会部署到目标中。有没有办法限制这个?

那么想了解使用 DACPAC 的所有限制是什么?

使用 sql Server 2019。

解决方法

从非空表中删除列可能会导致数据丢失。

它可以被覆盖:/p:BlockOnPossibleDataLoss=false

DacDeployOptions.BlockOnPossibleDataLoss Property

获取或设置布尔值,指定在操作可能导致数据丢失时是否应停止部署。

如果检测到数据丢失,则为真停止部署;否则为假。 默认为 true。