sqlserver merge关键字应用简介-替换insert_update


摘要:
merge关键字用于合并insert和update操作,
通过使用merge关键字,我们可以同时对源表进行修改和新增操作。
常见的应用场景:
根据不同的条件匹配两张表,如果不存在,则插入,否则更新
merge关键字的效率高于update和insert关键字
———————————————–
实验环境:
sql server 2008 R2


例:使用merge 替代insert update 关联写法

create table test(keyId int,info varchar(30))
go
insert into test(keyId,info)values
(1,'猫猫小屋'),(2,'maomao365.com')
go

/*sql server原始写法*/
update test set info='update data' where keyId=3
if @@rowcount =0
begin
insert into test(keyId,info)values(3,'insertData')
end
go

select * from test 
go

truncate table test 
insert into test(keyId,info)values
(1,'猫猫小屋'),(2,'maomao365.com')
go

---------------merge新写法----------
MERGE test AS target  ---定义目标表
    USING (SELECT '30', 'Data') AS source (keyId, info) ---源数据
    ON (target.keyId = source.keyId) --关联字段
    WHEN MATCHED THEN     ---如果匹配上就更新
        UPDATE SET info = source.info
    WHEN NOT MATCHED THEN    ---如果不匹配就插入
        INSERT (keyId, info)
        VALUES (source.keyId, source.info);
------------------------------------

select * from test 
go 
drop table test