sql server 2008 merge matched判定条件

SQL Server 2008 开始支持 MERGE语句 

 
-- 源表
CREATE 
TABLE 
test_from (id 
INT
, val 
VARCHAR
(20));  
-- 目标表
CREATE 
TABLE 
test_to (id 
INT
, val 
VARCHAR
(20));  
-- 插入源表
INSERT 
INTO 
test_from 
VALUES 
(1, 
‘A‘
);
INSERT 
INTO 
test_from 
VALUES 
(2, 
‘B‘
);  
-- 合并 源表到目标表
MERGE test_to USING test_from
ON 
( test_to.id = test_from.id )    
-- 条件是 id 相同
WHEN 
MATCHED 
THEN 
UPDATE 
SET 
test_to.val = test_from.val   
-- 匹配的时候,更新
WHEN 
NOT 
MATCHED 
THEN 
INSERT 
VALUES
(test_from.id, test_from.val) 
-- 源表有,目标表没有,插入
WHEN 
NOT 
MATCHED 
BY 
SOURCE 
THEN 
DELETE

-- 目标表有,源表没有,目标表该数据删除.  
-- 第一次检查 目标表数据.
SELECT 

FROM 
test_to;  
id          val
----------- --------------------
          
1 A
          
2 B    
-- 更新源表
UPDATE 
test_from 
SET 
val = 
‘A2‘ 
WHERE 
id = 1;
-- 删除源表
DELETE 
FROM 
test_from 
WHERE 
id = 2;
-- 插入源表
INSERT 
INTO 
test_from 
VALUES 
(3, 
‘C‘
);    
-- 合并 源表到目标表
MERGE test_to USING test_from
ON 
( test_to.id = test_from.id )    
-- 条件是 id 相同
WHEN 
MATCHED 
THEN 
UPDATE 
SET 
test_to.val = test_from.val   
-- 匹配的时候,更新
WHEN 
NOT 
MATCHED 
THEN 
INSERT 
VALUES
(test_from.id, test_from.val) 
-- 源表有,目标表没有,插入
WHEN 
NOT 
MATCHED 
BY 
SOURCE 
THEN 
DELETE

-- 目标表有,源表没有,目标表该数据删除.  
-- 再次检查 目标表数据.
SELECT 

FROM 
test_to;  
id          val
----------- --------------------
          
1 A2
          
3 C