MSSQLMerge的⽤法
Merge的⽤法
Merge可以完成以下功能:
1、两个表之间数据的更新
2、进⾏进销存更新库存
3、进⾏表之间数据的复制
语法说明:
1、在语句结束后⼀定要⽤分号,否则会提⽰错误。
2、    Merge后为⽬标表,Using后为数据源表
3、如果有两个 When matched,则必须使⽤and来限定第⼀个⼦句,⼀个⼦句必须制定⼀个update,另⼀个必须制定delete
4、    When not matched by target,这个⼦句处理存在于数据源之中,但不存在⽬标之中的数据⾏。
5、    When not matched等价于 When not matched by target
6、    When not mathed by source,这个⼦句处理,存在于⽬标中,但是不存在数据表之中的数据⾏
⼀、两个表之间数据的更新
create table test1 (col1 int,col2 varchar(100))
create table test2 (col3 int,col4 varchar(100))
insert into test1
values(1,'wang'),(2,'trieagle')
insert into test2(col3)
values(1),(2)
merge test2
using test1
l3
when matched then update set col4=col2;
select * from test2
结果:
col3        col4
1          wang
2          trieagle
⼆、进⾏进销存更新库存
sql中delete用法
Trade表为模拟进出库记录,正数表⽰⼊库,负数表⽰出库
create table stock(id int,qty int)
create table trade(id int ,qty int)
go
insert into stock
values (1,10), (2,20)
insert into trade
values(1,10),(1,-5),(1,20),(2,10),(2,-30),(3,5)
merge stock
using (select id,qty=sum(qty) from trade group by id) K
on stock.id=k.id
when matched and (stock.qty+k.qty)=0 then delete
when matched then update set stock.qty=stock.qty+k.qty
when not matched by target then insert values(k.id,k.qty);
select * from stock
结果:
id          qty
1          35
3          5
三、进⾏表之间数据的复制
drop table test1
drop table test2
create table test1 (col1 int,col2 varchar(100))
create table test2 (col3 int,col4 varchar(100))
insert into test1
values(1,'wang'),(2,'trieagle')
merge test2
using test1 l1 =l3
when matched and col2!=col4 then update set col4=col2 when not matched then insert values(col1,col2)
when not matched by source then delete;
select* from test2
结果:
col3        col4
1          wang
2          trieagle
继续:删掉test1中的⼀⾏,然后增加⼀⾏
Delete test1 where col1=1
Insert into test1 values(3,'wyq')
然后再执⾏
merge test2
using test1 l1 =l3
when matched and col2!=col4 then update set col4=col2 when not matched then insert values(col1,col2)
when not matched by source then delete;
结果:
col3        col4
2          trieagle
3          wyq

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。