如何将源控制的VS2010数据库项目中的更改合并到本地开发DB

时间:2011-08-12 12:27:14

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

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

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

当我想从源代码控制中“获取最新信息”时,我接着:

  • 从源代码管理
  • 更新VSDB项目文件
  • 使用架构比较将更改从项目推送到本地数据库实例

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

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

基本上,问题存在是因为VSDB项目中的定义不会自动与我的本地数据库同步;因此,每当我做出改变时,我都需要使用Schema Compare来做一个“糟糕的人合并”。

一种可能的解决方案是:

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

......这远非理想。

RedGate SQL源代码控制在这方面是否更好?

新的'Juneau'SQL工具集怎么样?

4 个答案:

答案 0 :(得分:1)

使用“部署”将源更改推送到数据库。从顶行的Build菜单中部署Solution,或者您可以在Solution Explorer中右键单击该项目并选择Deploy。

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

HTH

答案 1 :(得分:0)

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

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

使用这种方法的一个好处是我们能够将标准.cs文件提交给subversion,用户可以通过查看最新版本并运行它来使自己的开发数据库保持最新状态。另一个巨大的优势是我们可以定位多个数据库引擎,因为Actions本身知道根据所针对的数据库引擎呈现的SQL。


作为旁注,我们使用AdeptSQL来比较数据库,并喜欢它。它将创建一个完整的差异列表,您可以生成一个脚本以指向任一方向(给定数据库'A'和数据库'B',将A升级到B,或将B降级为A.)

对于少量额外费用,它们还提供扩展功能以执行数据差异。

http://www.adeptsql.com/

答案 2 :(得分:0)

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

  1. 如果您喜欢使用Management Studio中的设计器,请使用脚本 删除所做的任何更改并将其添加到VSDB项目中。
  2. 使用内置的Deployment functionality而不是使用Schema Compare。这将自动编写脚本并将增量更改部署到本地数据库中,只需单击一下

答案 3 :(得分:0)

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

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