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);
知识温故和梳理引用:
创建表一为源表:
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
原文:http://www.cnblogs.com/Warmsunshine/p/3638268.html