比较SQL Server DB架构&数据(同时)并生成脚本

时间:2012-07-26 09:52:44

标签: sql-server sql-server-2008-r2 compare

我有一个相当大/复杂的数据库,我需要在第1版到第2版的字段中进行升级。模式中有很多变化,重要的是两者之间的数据。

是的,我知道这应该是版本控制的alla:
http://www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html 但事实并非如此 - 那时我会完成。

所以,当前的问题,我面临选择要么通过所有提交还是尝试在两个版本的数据库之间进行区分。到目前为止,我已经尝试过:
http://opendbiff.codeplex.com/
http://www.sqldelta.com/
http://www.red-gate.com/

但是,他们似乎都没有能够成功生成架构升级脚本,因为它们不会同时执行数据。这会在向表添加新键时导致外键冲突,因为它引用的表是新的,并且在创建表的模式时,它包含的数据没有。它可能是,但这需要我使用工具的不同部分,然后将两个脚本混合在一起。

我知道这可能看起来像是重复:
What is best tool to compare two SQL Server databases (schema and data)? 在这里我找到了我尝试过的大多数现有工具,但到目前为止,我还没有设法获得这些工具来生成一个有效的模式迁移脚本(我真的不太关心数据,但是我做了需要外键所需的数据 - 因为我部署了旧版本和新版本,这就完全不同了。“

我期待太多了吗? 我应该放弃并开始手动拼接我所拥有的东西吗? 或者我是否完成所有提交并手动创建升级脚本?

2 个答案:

答案 0 :(得分:3)

我想不出比你似乎尝试过的更强大的工具。如果那些失败了,我的homegrown versioning system可能对你没什么帮助。

但是,您应该能够生成更新脚本,然后手动编辑它以向其添加数据转换。

和/或您可以在更新脚本运行的时间disable the foreign key constraints

答案 1 :(得分:0)

没有做同样的模式和数据"同时#34;。即使你将它们放在一个大脚本中,你仍然会首先进行模式,然后是数据。如果架构脚本创建了一个新表并向其添加了约束,则没有理由因为这些表中没有行而应该获得参照完整性违规错误。

无论如何,您应该尝试使用我们的xSQL Schema CompareData Compare工具,您会对性能和控制水平留下深刻印象。