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

  • 相关阅读:
    第三题 bfw在睡觉
    第二题 bfw和zhk的故事
    第一题 奶牛散步
    AC加油站7月比赛总结
    暑期机房联赛
    题解 P5663 【加工零件【民间数据】】
    题解 P1052 【过河】
    并发编程之进程
    网络编程socketserver
    网络编程之黏包
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5715821.html
Copyright © 2020-2023  润新知