sqlserver中关于merge

merge:

在2008后被引入,它能将insert,Update,delete 简单并为一句,
根据与源表连接的结果,对目标表进行插入,更新和删除操作
例如:Merge是关于对于两个表之间进行操作的

 

CREATE TABLE SourceTable
(
    id INT,
    [desc] NVARCHAR(20)
)

CREATE TABLE TargetTable
(
    id INT,
    [desc] NVARCHAR(20)
)

INSERT INTO SourceTable(id,[desc])
VALUES(    1,'描述1')

INSERT INTO SourceTable(id,[desc])
VALUES(    2,'描述2')

INSERT INTO SourceTable(id,[desc])
VALUES(    3,'描述3')

INSERT INTO SourceTable(id,[desc])
VALUES(    4,'描述4')

INSERT INTO TargetTable(id,[desc])
VALUES(    1,'在源表存在,将会被更新')

INSERT INTO TargetTable(id,[desc])
VALUES(    2,'在源表存在,将会被更新')

INSERT INTO TargetTable(id,[desc])
VALUES(    5,'在源表不存在,将会被删除')

INSERT INTO TargetTable(id,[desc])
VALUES(    6,'在源表存在,将会被删除')


SELECT * from TargetTable

SELECT * from SourceTable

MERGE INTO TargetTable AS T
USING SourceTable AS S
ON t.id = s.id
WHEN matched --当两个Id相等的时候,目标表Id为1,2的数据将被更新
THEN UPDATE SET t.[desc] = s.[desc]
WHEN NOT matched --目标表中没有,原表有,则插入相关数据
THEN INSERT VALUES(s.id,s.[desc])
WHEN NOT matched BY source--目标表中存在,原表中不存在,则删除
THEN delete ;                       

注意:merge语句结束后必须以 ;结尾,否则报错

转载于:https://www.cnblogs.com/niuzaihenmang/p/5715821.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值