zoukankan      html  css  js  c++  java
  • SQL Server merge用法

    本文转自 https://www.cnblogs.com/Vincent-yuan/p/11521229.html  

    有两个表名:source 表和 target 表,并且要根据 source 表中匹配的值更新 target 表。

    有三种情况:

    • source 表有一些 target 表不存在的行。在这种情况下,需要将 source 表中的行插入到 target 中。
    • 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;

    执行过程如下图:

  • 相关阅读:
    点击按钮,显示隐藏内容,点击隐藏内容,内容隐藏
    点击按钮,显示隐藏内容,再次点击内容,内容隐藏
    padding值
    文字竖行显示并且逐字出现
    鼠标放上去图片平滑变大效果
    animation
    transform
    Transition过度效果
    git分支操作
    超出文本用省略号代替
  • 原文地址:https://www.cnblogs.com/sdlz/p/13716519.html
Copyright © 2011-2022 走看看