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

相关文章:

  • 2022-12-23
  • 2022-02-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-13
  • 2021-09-16
  • 2022-12-23
猜你喜欢
  • 2021-08-22
  • 2022-12-23
  • 2021-07-03
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案