时间:2021-07-01 10:21:17 帮助过:46人阅读
Merge关键字可以进行2个表之间的更新。
等等
MERGE 目标表
USING 源表
ON 匹配条件
WHEN MATCHED THEN
语句
WHEN NOT MATCHED THEN
语句;
说明:
最末尾一定要有;代表语句结束
Merge 源表可以是表也可以是子查询语句
目标表只能是一个表
When
not matched by target(简化为When
not matched ),这个子句处理存在于数据源之中,但不存在目标之中的数据行。
When
not mathed by source,这个子句处理,存在于目标中,但是不存在数据表之中的数据行
如果有两个 when matched,则必须使用and来限定第一个子句,一个子句必须制定一个update,另一个必须制定delete
--有2张表test1 和test1,将test1的数据插入到test2,当id存在则更新,不存在则插入
create table test1 (id int,name varchar(100),total int)
create table test2 (id int,name varchar(100),total int)
insert into test1
values(1,‘wang‘,3),(2,‘trieagle‘,5)
insert into test2
values(1,‘li‘,7)
merge test2
using test1
on test1.id=test2.id
when matched then update set name=test2.name,total = test1.total
when not matched by target then insert values(test1.id,test1.name,test1.total);
select * from test2;
test2表的结果:
1 li 3
2 trieagle 5
delete from test1;
delete from test2;
insert into test1 values(1,‘wang‘,-3),(2,‘trieagle‘,5),(3,‘huang‘,6),(4,‘yuan‘,8)
insert into test2 values (1,‘wang‘,3),(2,‘trieagle‘,1),(5,‘huang‘,5)
---使用merge
merge test2 as t2
using test1 as t1
on t1.id=t2.id and t1.name = t2.name
when matched and (t2.total+t1.total =0) then delete
when matched then update set total=t1.total +t1.total
--处理存在于数据源(test2)之中,但不存在目标(test1)之中的数据行。
when not matched then insert values(t1.id,t1.name,t1.total)
--处理,存在于目标(test1)中,但是不存在数据源表之中的数据行
when not matched by source then delete;
select * from test1;
结果:
1 wang -3
2 trieagle 5
3 huang 6
4 yuan 8
select * from test2;
结果:
2 trieagle 10
3 huang 6
4 yuan 8
MS SQL 技巧总结--持续更新
标签:插入 技巧 另一个 说明 var delete update table 必须