MS SQL 技巧总结--持续更新
Posted wanxiangit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS SQL 技巧总结--持续更新相关的知识,希望对你有一定的参考价值。
使用Merge关键字做插入或更新操作
Merge关键字可以进行2个表之间的更新。
应用场景
- 批量插入或更新数据;
- 经销存更新库存
- 表之间数据的复制
等等
语法说明
MERGE 目标表
USING 源表
ON 匹配条件
WHEN MATCHED THEN
语句
WHEN NOT MATCHED THEN
语句;
说明:
-
最末尾一定要有;代表语句结束
-
Merge 源表可以是表也可以是子查询语句
-
目标表只能是一个表
-
When
-
When
-
如果有两个 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
综合使用多个 when matched和when not matched
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 技巧总结--持续更新的主要内容,如果未能解决你的问题,请参考以下文章