mssql sqlserver 采用merge关键字实现增删改的方法分享


摘要:
下文讲述采用merge关键字实现,联结(左连接 右连接)中的增(insert) 删(delete) 改(update)的操作方法


--目标表A  
CREATE TABLE TargetA(keyId INT,[info] VARCHAR(50))  
--数据源B  
CREATE TABLE SourceB(keyId INT,[info] VARCHAR(50))  
--目标表A 
INSERT INTO TargetA VALUES (1,'可关联数据'),(2,'可关联数据'),
(5,'无法关联数据')  ,(6,'无法关联数据')   
--数据源B
INSERT INTO SourceB VALUES (1,'test_1'),(2,'test_2'),(3,'test_3'),(4,'test_4')  
 
--注意事项   
---数据库源可以是一个子查询、视图、函数等能返回集合的sql脚本
---merge关键字结尾必须使用分号
---merge中insert update delete 都只能对target表,进行操作

MERGE INTO TargetA AS a     --此处可采用 merge top (10) 限制操作的行数   
USING SourceB AS b          --关联的源数据
ON a.keyId=b.keyId  
WHEN MATCHED            --当两者的keyId匹配成功,执行targetA的更新操作,这类类似内连接  
    THEN UPDATE SET a.[info] = b.[info] 
WHEN NOT MATCHED        --keyId匹配不成功 类似左连接 when not matched 等同于 when not matched by target 
    THEN INSERT VALUES(b.keyid,b.[info])    ---执行插入操作
WHEN NOT MATCHED BY SOURCE --target表中存在,source表中不存在 类似于 a right join b的右连接的方式 
    THEN DELETE      ---删除target表中的数据
OUTPUT $ACTION AS [操作方式]  
    ,INSERTED.keyId AS [插入keyId]  
    ,INSERTED.[info] AS [插入info]  
    ,DELETED.keyId AS [删除keyId]  
    ,DELETED.[info] AS [删除info]  
;  
  
SELECT * FROM SourceB AS st  
SELECT * FROM TargetA AS tt  
go
drop table TargetA
drop table SourceB
go
mssql_sqlserver_merge_insert_update_delete应用

mssql_sqlserver_merge_insert_update_delete应用