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语句结束后必须以 ;结尾,否则报错

posted @ 2016-07-28 18:15  那就让我这样吧  阅读(368)  评论(0编辑  收藏  举报