【问题标题】:How to merge changes from a source-controlled VS2010 database project to local development DB如何将源代码控制的 VS2010 数据库项目的更改合并到本地开发数据库
【发布时间】:2011-10-25 18:50:12
【问题描述】:

我们正在试用 VS2010 数据库项目进行新开发,使用以下开发周期:

  • 使用 Management Studio 在本地数据库实例上开发更改(使用设计器等)
  • 使用 VS2010 架构比较将这些更改同步/导入到 VSDB 项目中
  • 签入 VSDB 项目并运行自动构建/测试等

当我想从源代码管理中“获取最新信息”时,我会:

  • 从源代码管理更新 VSDB 项目文件
  • 使用 Schema Compare 将项目中的更改推送到我的本地数据库实例

这是它开始崩溃的地方......因为架构比较试图同步这两个版本,它试图撤消我对本地数据库所做的任何更改,作为我的一部分自己的功能开发。

显然,您可以告诉架构比较以跳过对我已修改的对象的更改,但遗憾的是这并不总是正常工作:http://connect.microsoft.com/VisualStudio/feedback/details/564026/strange-schema-compare-behavior-sql-2008-database-projects

根本上,问题的存在是因为VSDB项目中的定义并没有自动与我的本地数据库同步;因此,每次我得到更改时,我都需要使用 Schema Compare 进行“穷人合并”。

一种可能的解决方案是:

  • 使用 Schema Compare 将本地数据库中的任何更改同步到 VSDB 项目首先
  • 从源代码管理更新 VSDB 项目(因此使用源代码管理工具进行合并,而不是架构比较)
  • 架构比较从源代码管理到我的本地数据库实例的更改

...这远非理想。

RedGate SQL Source Control 在这方面是否更好?

新的“Juneau”SQL 工具集怎么样?

【问题讨论】:

  • 为什么不简单地使用数据库项目的方式。停止对数据库进行更改!

标签: sql-server visual-studio-2010 sql-server-2008 redgate datadude


【解决方案1】:

您使用“部署”将源更改推送到数据库。从顶行生成菜单中部署解决方案,或者您可以右键单击解决方案资源管理器中的项目并选择部署。

部署可在项目属性中进行配置。

HTH

【讨论】:

    【解决方案2】:

    你的过程是倒退的,这就是为什么这很困难。更改应该从 VSDB 流向您的数据库,而不是相反。试试这个:

    1. 如果您喜欢 Management Studio 中的设计器,但可以编写脚本 删除您所做的任何更改并将它们添加到您的 VSDB 项目中。
    2. 不要使用架构比较,而是使用内置的Deployment functionality。这将自动编写脚本并将增量更改部署到您的本地数据库中

    【讨论】:

      【解决方案3】:

      由于您提到了其他可能的解决方案,我将详细说明我们的商店如何管理数据结构更改和向开发数据库的传播。

      为了跟踪和应用差异,我们编写了一个 C# 应用程序,它有效地将数据库操作抽象为我们附加到操作列表的类。引擎动态加载表示数据库版本的模块,并将模块中的每个项目添加到要为该版本升级执行的操作列表中,然后处理该列表。 Actions包括DataRowInsertAction、TableCreateAction、ColumnModifyAction等。

      使用这种方法的一个好处是,我们能够将标准的 .cs 文件提交到 subversion,用户只需检查并运行最新的数据库,就可以使他们自己的开发数据库保持最新。另一个巨大的优势是我们可以针对多个数据库引擎,因为 Actions 本身知道根据所针对的数据库引擎呈现什么 SQL。


      顺便说一句,我们使用 AdeptSQL 来比较数据库,并且非常喜欢它。它将创建一个完整的差异列表,您可以生成一个脚本来执行任一方向(给定数据库“A”和数据库“B”,将 A 升级到 B,或将 B 降级到 A。)

      只需支付少量额外费用,它们还提供扩展功能来执行数据差异。

      http://www.adeptsql.com/

      【讨论】:

      • @JohnSaunders 我猜你错过了他在问题中要求提供有关替代解决方案(RedGate,朱诺)的信息这一点。
      • 你是对的。我会删除反对票,但您必须先编辑答案。我仍然认为你的答案是错误的,仅供参考。
      • @JohnSaunders 补充说明,这是解决替代方法的解决方案。
      【解决方案4】:

      SQL 源代码控制背后的想法基本上是颠覆开发过程 - 不是使用数据库脚本并将更改推送到数据库,而是对数据库进行更改,SQL 源代码控制计算增量和更新本地脚本并允许您将更改提交到源代码控制系统。

      SQL Source Control 当前仅与 SQL Server Management Studio 集成,但现在有一个名为 SQL Connect 的 VS 包,您可以在 VS 2010 中使用它,其工作方式与 SQL Source Control 中的工作方式大致相同。 http://www.red-gate.com/products/sql-development/sql-connect/index-2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 2012-01-24
        • 2014-05-30
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多