SQL Server架构同步
问题描述:
我正在处理一个预先存在的MS SQL Server数据库,这个数据库设计得不是很好。大多数情况下索引和主键都不存在。没有外键约束。SQL Server架构同步
我做了一个DB的本地副本(以免在实时版本上工作),并修复了大部分问题。我现在想syncronize我的变化到生产服务器,
但是......
,因为没有以前的外键约束有表中的关键不匹配,几千条。我尝试了一些同步工具,但它们都不允许忽略或解决FK不匹配问题。 (在SQL Server Management Studio中称为“在创建或重新启用时检查现有数据:否”)
有没有办法自动解决旧数据库的差异?
答
尝试使用来自红门的SQL DATA COMPARE来同步数据。
https://www.red-gate.com/dynamic/downloads/downloadform.aspx?download=sqldatacompare
您也可以尝试SQL比较syncrhonize结构,如果SQL数据比较不工作之前同步数据。
答
你所说的 “自动解析” 是什么意思? 现有数据是“不好的” - 也就是说,您试图强加的约束被违反。如果不修改数据,则无法使数据“良好”。而且显然没有办法自动决定如何修复数据。
因此,您可以做的最好的事情是分析数据,找出如何纠正,手动纠正,然后添加约束条件。 你也可以删除所有不一致的行(如果你需要这些数据可能是一个坏主意),或者迫使服务器忽略现有数据的限制(绝对是一个坏主意)。
如果你只是要删除的数据不一致,我建议你写(或生成,如果有很多卖foreing键)SQL脚本是这样的:
DELETE a FROM a LEFT JOIN b ON a.b_id = b.id WHERE b.id IS NULL
ALTER TABLE a ADD CONSTRAINT FK_a_b_id FOREIGN KEY (b_id) REFERENCES b (id)
假设我已经创建比我的FK约束不应该不可能自动丢弃不一致的数据。 – 2009-08-16 13:00:39
SQL Server无法为您做到这一点。可能有些第三方工具可以,但我怀疑是否有人照顾实施这一点。就我个人而言,我认为这是相当罕见的用例,并且使用普通SQL很容易实现。 请参阅编辑我的答案代码示例。 – VladV 2009-08-16 13:42:45