当前位置:Gxlcms > 数据库问题 > SQL Server merge用法

SQL Server merge用法

时间:2021-07-01 10:21:17 帮助过:15人阅读

  • target 表有一些 source表不存在的行。这种情况下,需要从 target 表中删除行。
  • source 表的某些行具有与 target 表中的行相同的键。但是,这些行在非键列中具有不同的值。这种情况下,需要使用来自 source 表中的值更新 target 表中的行。
  • 下图,说明了 source 表和 target 表 的一些操作:插入,更新,删除:

    技术图片

    如果单独使用 INSERT, UPDATE和DELETE语句,则需要三个单独的语句,来使 source 表中的匹配行的数据更新到 target表。

    但是,使用 merge 可以同时执行三个操作。下面是 merge语句的语法:

    MERGE target_table USING source_table
    ON merge_condition
    WHEN MATCHED
        THEN update_statement
    WHEN NOT MATCHED
        THEN insert_statement
    WHEN NOT MATCHED BY SOURCE
        THEN DELETE;

    使用示例:

    CREATE TABLE sales.category (
        category_id INT PRIMARY KEY,
        category_name VARCHAR(255) NOT NULL,
        amount DECIMAL(10 , 2 )
    );
    
    INSERT INTO sales.category(category_id, category_name, amount)
    VALUES(1,Children Bicycles,15000),
        (2,Comfort Bicycles,25000),
        (3,Cruisers Bicycles,13000),
        (4,Cyclocross Bicycles,10000);
    
    
    CREATE TABLE sales.category_staging (
        category_id INT PRIMARY KEY,
        category_name VARCHAR(255) NOT NULL,
        amount DECIMAL(10 , 2 )
    );
    
    
    INSERT INTO sales.category_staging(category_id, category_name, amount)
    VALUES(1,Children Bicycles,15000),
        (3,Cruisers Bicycles,13000),
        (4,Cyclocross Bicycles,20000),
        (5,Electric Bikes,10000),
        (6,Mountain Bikes,10000);

    要使用 sales.category_staging(源表)中的值将数据更新到 sales.category(目标表),要使用 merge:

    MERGE sales.category t 
        USING sales.category_staging s
    ON (s.category_id = t.category_id)
    WHEN MATCHED
        THEN UPDATE SET 
            t.category_name = s.category_name,
            t.amount = s.amount
    WHEN NOT MATCHED BY TARGET 
        THEN INSERT (category_id, category_name, amount)
             VALUES (s.category_id, s.category_name, s.amount)
    WHEN NOT MATCHED BY SOURCE 
        THEN DELETE;

    执行过程如下图:

    技术图片

     

    SQL Server merge用法

    标签:操作   存在   oss   src   stat   key   upd   let   table   

    人气教程排行