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

猜你喜欢

转载自www.cnblogs.com/ztf20/p/12134200.html