Dacpac 不得删除额外的列

Dacpac must not drop extra columns

我一直在愉快地编写一个使用的产品, Sql 服务器数据库项目和生活一直很美好,直到我们 发现升级有问题。

当我们创建表、存储过程和各种其他数据库制品时, 一旦部署在客户处,他们就可以将自己的列添加到我们的 dacpac 创建的表中。

我们正在使用 DacFx 进行部署 (Microsoft.SqlServer.Dac),并且还为坚持由其 DBA 进行部署的客户提供原始 dacpac。

虽然使用 SSMS 或类似工具时问题可能仍然存在, 我确信使用 "right" 代码,我们应该能够在通过代码部署时以某种方式防止这种情况发生。

有没有人遇到同样的问题并且可能找到了解决方案?

更新,添加部署设置的屏幕截图。 如图所示,"Drop objects in target but not in project" 设置已关闭。

有一个选项 "DropObjectsNotInSource" 如果该选项为 false,则列将保留(但您必须专门删除其他对象(例如在 post-deploy 中)。

latest build中有更多选项,但不要认为您可以指定仅保留列。

喜欢这个说法"I have happily been writing a product which uses a, Sql Server Database Project and life has been good"哈哈!

您可以编写一个部署贡献者来查找新列并从流程中删除删除步骤。

你可以自己写,或者我有一个应该可以做到的 (http://agilesqlclub.codeplex.com/),如果你使用我的,那么这可能对你有用:

/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=KeepType(.*Column.*)"

如果你想自己写,那么你可以使用我的作为指南(源代码在 codeplex 上)或具体参见 http://blogs.msdn.com/b/ssdt/archive/2013/12/23/dacfx-public-model-tutorial.asp "Solution 2: Filtering at deployment time".

埃德