SQL Server架构同步

时间:2009-08-16 11:54:34

标签: sql-server database synchronization

我正在研究一个设计不太好的预先存在的MS SQL Server数据库。大多数情况下缺少索引和主键。没有外键约束。

我制作了数据库的本地副本(以便不在实时版本上工作),并修复了大部分问题。我现在想要将我的更改同步到生产服务器,

但是...

由于之前没有外键约束,表中存在密钥不匹配,其中有数千个。我尝试了一些同步工具,但它们都不允许忽略或解决FK不匹配问题。 (在SQL Server Management Studio中,它被称为“在创建时检查现有数据或重新启用:否”)

有没有办法自动解决旧数据库的差异?

2 个答案:

答案 0 :(得分:2)

尝试从red-gate使用SQL DATA COMPARE来同步数据。

https://www.red-gate.com/dynamic/downloads/downloadform.aspx?download=sqldatacompare

如果SQL数据比较不起作用,您还可以在同步数据之前尝试SQL比较syncrhonize结构。

SQL compare

答案 1 :(得分:0)

“自动解决”是什么意思? 现有数据“不好” - 也就是说,您试图强加的约束被违反。没有修改它就无法使你的数据“好”。而且显然没有办法自动决定如何修复数据。

因此,您可以做的最好的事情是分析数据,找出如何纠正它,手动执行更正,然后添加约束。 您也可以删除所有不一致的行(如果您需要数据,可能是个坏主意),或强制服务器忽略现有数据的约束(绝对是个坏主意)。

如果您只想删除不一致的数据,我建议您编写(或生成,如果有很多外键)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)