0

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

数据库A:

  1. 父发票表 -InvNo int -InvDate Datetime -CustomerName varchar(50) -InvVal double

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

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

  1. 现在我想将两个子表合并为一个子表而不丢失数据。一张发票可能包含不同/相等数量的相同项目。如何合并这些子表。

提前致谢, Senthil

4

1 回答 1

0

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

看到您只想合并子表,父表是无关紧要的。

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

  • 匹配
  • 不匹配[按目标]
  • 来源不匹配

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

完成设计后,文档 ( 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
;
于 2013-07-30T18:06:51.950 回答