合并两个不同数据库中的两个子表

时间:2013-07-30 15:34:51

标签: sql-server-2012

我是SQL SERVER 2012 MERGE语句的新手。我需要将来自不同数据库的两个子表合并到一个表中。

DatabaseA:

  1. 父发票表 -InvNo int -InvDate日期时间 -CustomerName varchar(50) -InvVal double

  2. Child InvoiceDet表 -InvNo int -InvDate DateTime -ItemName varchar(50) -Qty int -Rate double

  3. DataBaseB:包含相同的上述结构。

    1. 现在我想将两个子表合并到一个子表中而不会丢失数据。单个发票可能包含具有不同/相等数量的相同项目。如何合并这些子表。
    2. 提前致谢, 塞特希

1 个答案:

答案 0 :(得分:0)

首先,您需要能够同时查询这两个表。您可能需要链接服务器或openrowset(或朋友)。

看看你想如何合并子表,父表是无关紧要的。

然后你需要弄清楚合并的逻辑。假设您希望将A合并为B.有三种情况:

  • MATCHED
  • 不匹配[目标]
  • 不符合来源

在每种情况下你想做什么?

完成设计后,文档(http://technet.microsoft.com/en-us/library/bb510625.aspx)有很好的例子。

基本上你想要:

MERGE child as target
USING (select ... from databaseA.dbo.child) as source (...)
ON (conditions)
WHEN MATCHED THEN
    UPDATE SET target.v = source.v
WHEN NOT MATCHED BY TARGET THEN
    INSERT (v) VALUES (source.v)
-- WHEN NOT MATCHED BY SOURCE THEN
  -- Don't delete anything
;