我对用于将表(或可能是其子集)与来自另一个类似表的数据同步的T-SQL源代码感兴趣。这两个表可以包含任何变量,例如我可以有
base table source table
========== ============
id val id val
---------- ------------
0 1 0 3
1 2 1 2
2 3 3 4
或
base table source table
=================== ==================
key val1 val2 key val1 val2
------------------- ------------------
A 1 0 A 1 1
B 2 1 C 2 2
C 3 3 E 4 0
或包含具有相似名称的类似列的任何两个表。我希望能够
最好使用存储过程。有没有人为此写过存储过程,还是你指向一个来源?
答案 0 :(得分:4)
SQL Server 2008具有新的merge statement功能。如果写出来有点复杂,那就非常灵活。
作为示例,以下查询将同步@base
和@source
表。它仅限于@base
的子集id <> 2
:
MERGE @base as tgt
USING @source as src
ON tgt.id = src.id and tgt.val = src.val
WHEN NOT MATCHED BY TARGET
THEN INSERT (id, val) values (src.id, src.val)
WHEN NOT MATCHED BY SOURCE AND tgt.id <> 2
THEN DELETE
答案 1 :(得分:1)
不确定它是否对您的特定情况有用,但这种操作通常使用外部工具(SQL Workbench diff,SQL Compare等)相对容易完成。 它甚至可以编写脚本,可能无法通过T-SQL过程调用。
答案 2 :(得分:1)
有趣的问题。
你可以从EXCEPT - INTERSECT
开始http://msdn.microsoft.com/en-us/library/ms188055.aspx
这是现成的解决方案,可以帮到你
http://www.sqlservercentral.com/scripts/Miscellaneous/30596/