合并语法错误

时间:2014-09-05 05:35:02

标签: sql sql-server tsql

我正在尝试使用合并语法,但它无法正常工作

请帮我解决这个问题

create table tgt(id int,name varchar(10),age int)
insert into tgt values(1,'x',21),(2,'y',22),(3,'z',23)

create table src(id int,name varchar(10),age int)
insert into src values(1,'x1',24),(2,'x2',27),(4,'y1',27),(5,'z1',29),(3,'z',23)

merge tgt t using src s 
on t.id=s.id 
when matched then update src s
    set s.id=t.id,
    s.name=t.name,
    s.age=t.age
when not matched then
insert(id,name,age) values(s.id,s.name,s.age);

错误消息

Msg 102, Level 15, State 1, Line 12
Incorrect syntax near 'src'.

1 个答案:

答案 0 :(得分:2)

看起来你与source&混淆了目标。 when matched then update后无需使用表名,并确保您正在更新target表而不是source表。

尝试以下代码:

create table tgt(id int,name varchar(10),age int)
insert into tgt values(1,'x',21),(2,'y',22),(3,'z',23)

create table src(id int,name varchar(10),age int)
insert into src values(1,'x1',24),(2,'x2',27),(4,'y1',27),(5,'z1',29),(3,'z',23)

merge tgt t using src s 
on t.id=s.id 
when matched then 
    update 
    set t.id=s.id,
    t.name=s.name,
    t.age=s.age
when not matched then
    insert(id,name,age) values(s.id,s.name,s.age);