2

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

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

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

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

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

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

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

一种可能的解决方案是:

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

...这远非理想。

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

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

4

4 回答 4

1

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

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

高温高压

于 2012-04-18T14:21:25.537 回答
0

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

  1. 如果您喜欢它们,请使用 Management Studio 中的设计器,但将您所做的任何更改编写脚本并将它们添加到您的 VSDB 项目中。
  2. 而不是使用架构比较使用内置的部署功能。只需单击一下,这将自动编写脚本并将增量更改部署到本地数据库
于 2012-04-18T14:45:29.443 回答
0

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

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

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


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

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

http://www.adeptsql.com/

于 2012-04-18T14:31:12.547 回答
0

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

于 2012-05-10T13:21:25.493 回答