6

我一直很高兴地编写一个使用 Sql Server 数据库项目的产品,并且生活一直很好,直到我们发现升级中的问题。

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

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

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

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

更新,添加部署设置的屏幕截图。从图中可以看出,“在目标中放置对象但不在项目中”设置已关闭。

部署选项

4

2 回答 2

3

喜欢这句话“我很高兴地写了一个使用 Sql Server 数据库项目的产品,生活一直很好”哈哈!

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

你可以自己写,或者我有一个应该做的(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特别是“解决方案 2:部署时过滤”。

埃德

于 2015-06-30T09:54:09.810 回答
0

有一个选项“DropObjectsNotInSource”,如果该选项为假,那么列将保留(但您必须专门删除其他对象(例如在部署后)。

最新版本中有更多选项,但不要认为您可以指定仅保留列。

于 2015-06-17T05:18:31.837 回答