zoukankan      html  css  js  c++  java
  • SQL2008 Merge关键字用法与简例(转)

    --Merge 语法是对表进行插入,更新,删除这三个操作的合并。
    --根据与源表联接的结果,对目标表执行插入、更新或删除操作。
    --MERGE 语法包括如下五个主要子句:
    -- MERGE 子句用于指定作为插入、更新或删除操作目标的表或视图。
    -- USING 子句用于指定要与目标联接的数据源。
    -- ON 子句用于指定决定目标与源的匹配位置的联接条件。
    -- WHEN 子句用于根据ON 子句的结果指定要执行的操作。
    -- OUTPUT 子句针对更新、插入或删除的目标对象中的每一行返回一行。
    --示例:
    USE tempdb
    GO
    --创建表A
    IF NOT OBJECT_ID('[A]') IS NULL
    DROP TABLE [A]
    GO
    CREATE TABLE A(ID INT,ACOL VARCHAR(10))
    GO
    INSERT A VALUES(1,N'A')
    INSERT A VALUES(2,N'B')
    INSERT A VALUES(3,N'C')
    INSERT A VALUES(6,N'X') --此记录在B表中不存在,删除
    GO
    --创建表B
    IF NOT OBJECT_ID('[B]') IS NULL
    DROP TABLE [B]
    GO
    CREATE TABLE B(ID INT,BCOL VARCHAR(10),XCOL VARCHAR(10))
    GO
    INSERT B VALUES(1,N'A',N'T') --1的ID与A表ID匹配且指定值与A表指定值对应相同,不变
    INSERT B VALUES(2,N'P',N'O') --2和的ID与A表ID匹配,指定值与A表指定值对应不同,更新
    INSERT B VALUES(3,N'P',N'N')
    INSERT B VALUES(4,N'L',N'Y') --4和的ID与A表ID匹配,指定值在A表中对应不存在,插入
    INSERT B VALUES(5,N'E',N'S')
    GO
    --开始合并两个表:
    MERGE A --要处理的表
    USING B --参照的表
    ON A.ID=B.ID --关联条件
    WHEN NOT MATCHED THEN INSERT VALUES(B.ID,B.BCOL) --如果要处理表没有参照表上的记录,则插入
    WHEN MATCHED THEN UPDATE SET A.ACOL=B.BCOL --如果记录匹配,就更新目标表的匹配行
    WHEN NOT MATCHED BY SOURCE THEN DELETE --如果要处理表的记录在参照表上不存在,则删除
    OUTPUT $action, Inserted.*, Deleted.*; --相当于输出以上语句的操作记录
    /*--result:
    $action ID ACOL ID ACOL
    ---------- ----------- ---------- ----------- ----------
    INSERT 4 L NULL NULL
    INSERT 5 E NULL NULL
    UPDATE 1 A 1 A
    UPDATE 2 P 2 B
    UPDATE 3 P 3 C
    DELETE NULL NULL 6 X
    (6 行受影响)
    */
    --看看A表更新成什么样:
    SELECT * FROM A
    /*
    ID ACOL
    ----------- ----------
    1 A
    2 P
    3 P
    4 L
    5 E
    (5 行受影响)
    */
    --再变换一个字段
    MERGE A --要处理的表
    USING B --参照的表
    ON A.ID=B.ID --关联条件
    WHEN NOT MATCHED THEN INSERT VALUES(B.ID,B.XCOL)
    WHEN MATCHED THEN UPDATE SET A.ACOL=B.XCOL
    WHEN NOT MATCHED BY SOURCE THEN DELETE
    OUTPUT $action, Inserted.*, Deleted.*;
    /*--result:
    $action ID ACOL ID ACOL
    ---------- ----------- ---------- ----------- ----------
    UPDATE 1 T 1 A
    UPDATE 2 O 2 P
    UPDATE 3 N 3 P
    UPDATE 4 Y 4 L
    UPDATE 5 S 5 E
    (5 行受影响)
    */
    --再看看现在的A表像什么样
    SELECT * FROM A
    /*
    ID ACOL
    ----------- ----------
    1 T
    2 O
    3 N
    4 Y
    5 S
    (5 行受影响)
    */
  • 相关阅读:
    spring框架里面处理中文匹配
    日常问题记录--使用fiddler自动响应jsonp结构的响应
    linux命令--pamp
    每天一个linux命令--nice命令
    阿里RAP+fiddler实现app原生应用的cgi数据mock----- (二)添加mock规则,随机返回4中类型(不同长度)的数据
    父子组件之间传递数据
    redux-API(二)
    redux数据流
    Redux 的基础概念-API
    react-redux要点梳理
  • 原文地址:https://www.cnblogs.com/andy_tigger/p/2319780.html
Copyright © 2011-2022 走看看