zoukankan      html  css  js  c++  java
  • 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语句结束后必须以 ;结尾,否则报错

  • 相关阅读:
    常用的标签分类
    css 实现动态二级菜单
    5大主流浏览器内核
    MySQL里面的子查询
    Algolia Search
    Nginx配置
    PHP中Abstract与Interface区别
    Shell 基本语法
    百度 echarts K线图使用
    php_soap扩展应用
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5715821.html
Copyright © 2011-2022 走看看