zoukankan      html  css  js  c++  java
  • merge源表数据移植到目标表新表数据中

    merge into dbo.ak_SloteCardTimes a using(select RecordID,CardNO,SloteCardTime from dbo.Tb_CardDate b ) c on(a.RecordID=c.RecordID)
    when matched then update set a.CardNO=c.CardNO ,a.SloteCardTime=c.SloteCardTime
    when not matched  then insert(RecordID,CardNO,SloteCardTime)
    values(c.RecordID,c.CardNO,c.SloteCardTime);

    知识温故和梳理引用:

    创建表一为源表:

    CREATE TABLE Product   
    (   
        ProductID    varchar(7) NOT NULL PRIMARY KEY,   
        ProductName varchar(100) NOT NULL,   
        Price        decimal(13,2) DEFAULT 0   
    );  
    
    INSERT INTO Product   
        Values   
        ('4100030','iPhone5c',5500),   
        ('4100031','iPhone4',3200),
        ('4100037','iPhone5s',5500),   
        ('4100038','iPhone4s',3200);
    

     目标表:

     CREATE TABLE ProductNew   
        (   
            ProductID    varchar(7) NOT NULL PRIMARY KEY,   
            ProductName varchar(100) NOT NULL,   
            Price        decimal(13,2) DEFAULT 0   
        );  
    
    --MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步
    	--显然Product与ProductNew表的MERGE匹配条件为主键ProductID字段,初始情况下,ProductNew表为空,此时肯定执行的是WHEN NOT MATCHED THEN后的语句,我们先只考虑源表递增的情况,MERGE语句如下:
       MERGE ProductNew AS d   
       USING    Product   AS s   
       ON s.ProductID = d.ProductId   
       WHEN NOT MATCHED THEN   
       INSERT( ProductID,ProductName,Price)   
       VALUES(s.ProductID,s.ProductName,s.Price);
      
        --现在,我们更新Product表4100030产品的价格,将其修改为9500:
        --我们也希望每天同步的时候应该将更新后的价格同步到ProductNew表,显然此时在MERGE语句中应该添加WHEN MATCHED THEN 语句,该语句来更新ProductNew表的价格,添加匹配更新后的MERGE语句:
        MERGE ProductNew AS d   --目标表
        USING   Product    AS s           --源表 
        ON s.ProductID = d.ProductId    --匹配条件
        WHEN NOT MATCHED THEN   
        INSERT( ProductID,ProductName,Price)   
        VALUES(s.ProductID,s.ProductName,s.Price)
        WHEN MATCHED THEN   
        UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
       -- 我们的UPDATE语句里面没有更新ProductID字段,因为这是完全没必要的(如果修改了ProductID字段会直接走到NOT MATCHED)。
    --假如我么会把源表删除一条数据 即源表存在三条数据而 目标表有四条数据 -- WHEN NOT MATCHED BY TARGET 表示目标表不匹配,BY TARGET是默认的 --WHEN NOT MATCHED BY SOURCE 表示源表不匹配,即目标表中存在,源表中不存在的情况。现在我们要完成源表DELETE后,目标表的同步动作,MERGE语句如下: MERGE ProductNew AS d USING Product AS s ON s.ProductID = d.ProductId WHEN NOT MATCHED BY TARGET --表示目标表不匹配,BY TARGET是默认的 THEN INSERT( ProductID,ProductName,Price) VALUES(s.ProductID,s.ProductName,s.Price) WHEN NOT MATCHED BY SOURCE --表示源表不匹配,即目标表中存在,源表中不存在 THEN DELETE WHEN MATCHED THEN UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price;
  • 相关阅读:
    python3从尾到头打印链表
    替换空格
    二维数组中的查找
    堪比福尔摩斯的破案新科技!快来了解一下
    好莱坞首部全亚裔主演电影上映,华人终于谈恋爱了
    《呼啸山庄》:爱之深,恨之切,死相依
    《碟中谍 6:全面瓦解》口碑爆棚,登顶北美周末票房
    让重刑犯做瑜伽:新西兰人性化监狱的故事
    python面试笔试题汇总
    centos7 重置root 密码
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/3638268.html
Copyright © 2011-2022 走看看