3

我有一个相当大/复杂的数据库,我需要在现场从版本 1 升级到版本 2。架构和重要的数据之间有很多变化。

是的,我知道这应该是版本控制的阿拉: http:
//www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html 但它不是 - 它将是当我完成时。

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

但是,它们似乎都无法成功生成模式升级脚本,因为它们不会同时处理数据。当向表添加新键时,这会导致外键违规,因为它引用的表是新的,并且虽然已创建表的架构,但它包含的数据尚未创建。可能是这样,但这需要我使用工具的不同部分,然后将两个脚本混合在一起。

我知道这可能看起来像以下内容的副本:
比较两个 SQL Server 数据库(架构和数据)的最佳工具是什么? 这是我找到我尝试过的大多数现有工具的地方,但到目前为止,我还没有设法让其中任何一个生成一个工作模式迁移脚本(我真的对数据不太在意,但我做到了需要外键所需的数据-这就是我部署旧版本和新版本时的全部区别)。

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

4

2 回答 2

3

I can't think of more powerful tools available than the ones you seem to have tried. If those fail, my homegrown versioning system probably won't help you much either.

However, you should be able to generate an update script and then manually edit it to add the data transformations to it.

And/or you could disable the foreign key constraints for the time that the update script runs.

于 2012-07-26T10:00:39.733 回答
0

没有“同时”做模式和数据这样的事情。即使您将它们放在一个大脚本中,您仍然会先做模式,然后再做数据。如果架构脚本创建了一个新表并向其添加了一个约束,那么您没有理由会收到参照完整性违规错误,因为这些表中没有行。

在任何情况下,您都应该尝试一下我们的xSQL 模式比较数据比较工具,您会对所获得的性能和控制水平印象深刻。

于 2013-12-06T16:00:42.100 回答