首页 > 其他 > 详细

merge源表数据移植到目标表新表数据中

时间:2014-04-02 10:14:52      阅读:481      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
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);
bubuko.com,布布扣

知识温故和梳理引用:

创建表一为源表:

1
2
3
4
5
6
7
8
9
10
11
12
13
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);

 目标表:

1
2
3
4
5
6
CREATE TABLE ProductNew  
   (  
       ProductID    varchar(7) NOT NULL PRIMARY KEY,  
       ProductName varchar(100) NOT NULL,  
       Price        decimal(13,2) DEFAULT 0  
   ); 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--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)。<br>   --假如我么会把源表删除一条数据 即源表存在三条数据而 目标表有四条数据
   -- 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;

merge源表数据移植到目标表新表数据中,布布扣,bubuko.com

merge源表数据移植到目标表新表数据中

原文:http://www.cnblogs.com/Warmsunshine/p/3638268.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!