zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    部署openstack的官网文档解读mysql的配置文件
    ubuntu14.04行更新软件包
    Ubuntu14.04上修改主机名
    ubuntu上修改root密码
    在ISE查看各个模块消耗的资源
    132
    Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较
    NAND flash和NOR flash的区别详解
    FPGA三分频,五分频,奇数分频
    以太网之物理层
  • 原文地址:https://www.cnblogs.com/ztf20/p/12134200.html
Copyright © 2011-2022 走看看