MS SQL 技巧总结--持续更新

Posted wanxiangit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS SQL 技巧总结--持续更新相关的知识,希望对你有一定的参考价值。

使用Merge关键字做插入或更新操作

Merge关键字可以进行2个表之间的更新。

应用场景

  1. 批量插入或更新数据;
  2. 经销存更新库存
  3. 表之间数据的复制

等等

语法说明

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

综合使用多个 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 技巧总结--持续更新的主要内容,如果未能解决你的问题,请参考以下文章

前端页面重构技巧总结TIP持续更新...

微信小程序开发技巧总结(持续更新...)

工作中使用的一些技巧总结后续持续性更新

iOS开发调试技巧总结(持续更新中)

web后端学习过程中技巧总结(持续更新。。。)

PLSQL Developer 11 使用技巧(持续更新)