zoukankan      html  css  js  c++  java
  • MS SQL 技巧总结--持续更新

    使用Merge关键字做插入或更新操作

    Merge关键字可以进行2个表之间的更新。

    应用场景

    1. 批量插入或更新数据;
    2. 经销存更新库存
    3. 表之间数据的复制

    等等

    语法说明

    MERGE 目标表
    
    USING 源表
    
    ON 匹配条件
    
    WHEN MATCHED THEN
    
      语句
    
    WHEN NOT MATCHED THEN
    
      语句;
    

    说明:

    • 最末尾一定要有;代表语句结束

    • Merge 源表可以是表也可以是子查询语句

    • 目标表只能是一个表

    • When not matched by target(简化为When not matched ),这个子句处理存在于数据源之中,但不存在目标之中的数据行。

    • When not mathed by source,这个子句处理,存在于目标中,但是不存在数据表之中的数据行

    • 如果有两个 when matched,则必须使用and来限定第一个子句,一个子句必须制定一个update,另一个必须制定delete

    应用举例

    批量插入或更新数据

    
    --有2张表test1 和test1,将test1的数据插入到test2,当id存在则更新,不存在则插入
    create table test1 (id int,name varchar(100),total int)
    create table test2 (id int,name varchar(100),total int)
     
    insert into test1
    values(1,'wang',3),(2,'trieagle',5)
    insert into test2
    values(1,'li',7)
    
    merge test2 
    using test1 
    on test1.id=test2.id
    when matched then update set name=test2.name,total = test1.total
    when not matched by target then insert values(test1.id,test1.name,test1.total);
    select * from test2;
    

    test2表的结果:

    1 li 3
    2 trieagle 5

    综合使用多个 when matched和when not matched

    delete from test1;
    delete from test2;
    insert into test1 values(1,'wang',-3),(2,'trieagle',5),(3,'huang',6),(4,'yuan',8)
    
    insert into test2 values (1,'wang',3),(2,'trieagle',1),(5,'huang',5)
    ---使用merge
    merge test2 as t2
    using test1  as t1
    on t1.id=t2.id  and t1.name = t2.name
    when matched and (t2.total+t1.total =0) then delete 
    when matched then update set total=t1.total +t1.total
    --处理存在于数据源(test2)之中,但不存在目标(test1)之中的数据行。
    when not matched  then insert values(t1.id,t1.name,t1.total)
    --处理,存在于目标(test1)中,但是不存在数据源表之中的数据行
    when not matched by source then delete;
    
    select * from test1;
    结果:
    1	wang	-3
    2	trieagle	5
    3	huang	6
    4	yuan	8
    select * from test2;
    结果:
    2	trieagle	10
    3	huang	6
    4	yuan	8
    
  • 相关阅读:
    std::async
    k最近邻算法(kNN)
    QNX下进程间通信
    ubuntu 18.04 安装破解pycharm professional 专业版
    安装scrapy出现Twisted依赖问题
    pytorchhub解决bug:.cache orchhubmaster.zip.....'另一个程序正在使用此文件,进程无法访问。'
    pytorchhub教程之安装pytorch或pytorchversion
    错误:java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory 解决方案
    Failed to start component [StandardEngine[Catalina].StandardHost[localhost].错误解决方案
    Javaweb之注解访问servlet和web.xml配置文件
  • 原文地址:https://www.cnblogs.com/wanxiangIT/p/13276897.html
Copyright © 2011-2022 走看看