当前位置:首页 > 数据库 > 正文

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