合并两个表并分别插入/更新

时间:2016-11-01 19:18:26

标签: sql sql-server tsql sql-server-2014

我有两张桌子,我必须合并记录。

源:

ID  seq  name    designation   company
001   1  aaa     Developer      YYY
001   2  aaa     lead        yyy
002   1  mmm     consultant     bbb
003   1  ppp     developer      yyy
003   2  ppp     lead           yyy
003   3  ppp     manager        yyy

目标:

ID  seq  name    designation   company
001   1  aaa     Developer      YYY
001   2  aaa     lead        yyy
002   1  mmm     consultant     bbb
003   1  ppp     developer      yyy
003   2  ppp     lead           yyy
003   3  ppp     manager        yyy

我想写合并插入/更新记录。我的关键列是ID和seq both.they是复合主键。 通常它是我们得到的更新记录。例如,ID 001在源中有两个记录。如果ID 001获得序列3的另一条记录,则该记录应作为目标插入。

如果我的来源现在有 源:

ID  seq  name    designation   company
001   1  aaa     Developer      YYY
001   2  aaa     lead           yyy
001   3  aaa     manager        yyy
002   1  mmm     consultant     bbb
003   1  ppp     developer      yyy
003   2  ppp     lead           yyy
003   3  ppp     manager        yyy

那么目标应该是: 目标:

ID  seq  name    designation   company
001   1  aaa     Developer      YYY
001   2  aaa     manager        yyy
001   3  aaa     manager        yyy
002   1  mmm     consultant     bbb
003   1  ppp     developer      yyy
003   2  ppp     lead           yyy
003   3  ppp     manager        yyy

我正在尝试使用以下合并,但这对我不起作用。

MERGE target t 
using source s 
on  s.ID=t.ID and s.seq=t.seq
when not matched
then 
Insert
(
ID,
seq,
name,
designation,
company
)
Values
(
s.ID,
s.seq,
s.name,
s.designation,
s.company
)
when matched
then 
update
set

name=s.name,
designation=s.designation,
company=s.company
;
你能告诉我哪里出错了吗? 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

您必须指定sum(1 if x in A else -1 if x in b else 0 for x in arr)

只需尝试以下查询:

NOT MATCHED BY TARGET