【问题标题】:Dacpac must not drop extra columnsDacpac 不得删除多余的列
【发布时间】:2015-09-02 01:27:23
【问题描述】:

我很高兴地编写了一个使用 a, Sql Server 数据库项目和生活一直很好,直到我们 发现升级有问题。

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

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

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

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

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

【问题讨论】:

  • 所以确切的问题是客户可以创建额外的列,但是当您部署 DacPac 时它会删除这些列?
  • @Nick.McDermaid 这正是问题所在,措辞非常好:)
  • 嗨,路易斯,你有没有找到一个好的解决方案?我还需要能够部署而不是删除列(从选定的表中),同时添加已引入数据库项目的新列
  • 嗨@SimonGreen,我也有同样的问题,你找到解决方案了吗?
  • 嗨,我没有找到很好的解决方案,不。我写了一个修饰符来检测Alter Table Steps是否在计划中(在这种情况下我只是删除它们),或者是否使用了SqlTableMigrationTStep,在这种情况下我必须删除整个步骤,然后放入一系列的当删除 SqlMigrationStep 时允许 dacpac 部署成功完成的例程......此外,我必须手动实现我想要的列添加和删除,但执行老式脚本,如“如果不存在我的新列,然后创建它'...

标签: sql-server dacpac dac data-tier-applications


【解决方案1】:

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

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

【讨论】:

  • 嗨,马克,很抱歉,但从我的处理来看,情况并非如此。该设置已关闭,我正在使用“最新版本”。
  • 列不是“对象”,至少从 Dacpac 的角度来看是这样。设置该标志将防止删除表、视图等,但不会删除列。
【解决方案2】:

喜欢这句话“我很高兴地写了一个使用 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:部署时过滤”。

埃德

【讨论】:

  • 这真的有效吗?我不认为 Columns 是一种类型,那么 KeepType 命令会起作用吗?
  • LOL 你是正确的列更改我们在表上得到 ALTER 而不是在表上创建(列类型确实存在,我们只是看不到它) - 我将添加一个额外的过滤器类型,用于将列保留在表格中,因为我已经看过几次了(我将在即将到来的项目中自己需要它):)
  • 嗨,Ed,我对你在这里的进展很感兴趣。我一直在做一些调查,我看到 DeploymentPlanModifier 接收到一个表的单个 AlterElementStep,它可能包含该表的多个列添加和删除。是否可以过滤掉删除,以便只执行列添加?您是否必须删除 AlterElementStep 并用一个新的(减少的)替换它?
  • 嘿西蒙,我已经发布了一个新版本,你对 AlterElementStep 的权利 - 完整的文章见 the.agilesql.club/blog/Ed-Elliott/2015/09/23/… - 试一试,如果它为你解决问题,请告诉我
  • agilesqlclub.codeplex.com/releases/view/617564获取下载(版本>= 1.4.1)
猜你喜欢
  • 1970-01-01
  • 2018-09-18
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多