• SQL server最新技术:Merge及【OFFSET和FETCH】


    Merge关键字在SQL server2008中被引用

        在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,Delete。而使用Merge,仅仅需要使用一条语句就好。如下代码:

     1 create table testsource 
    2 (
    3 id int,
    4 [description] varchar(50),
    5 )
    6 go
    7 create table testdatasource
    8 (
    9 id int,
    10 [description] varchar(50),
    11 )
    12 go
    13
    14 insert into testsource values(1,'desc1')
    15 insert into testsource values(2,'desc2')
    16 insert into testsource values(3,'desc3')
    17 insert into testsource values(4,'desc4')
    18
    19 insert into testdatasource values(1,'update the equal')
    20 insert into testdatasource values(2,'update the equal')
    21 insert into testdatasource values(5,'delete the not exist in source')
    22 insert into testdatasource values(6,'delete the not exist in source')
    23
    24
    25 merge into testsource as a
    26 using testdatasource as b
    27 on a.id=b.id
    28 when matched
    29 then update set a.[description]=b.[description] --更新相同的id数据
    30 when not matched
    31 then insert values(b.id,b.[description]) -- 目标表中没有的数据源表中有 将被插入
    32 when not matched by source
    33 then delete; --目标表中有源表中没有将被删除

    Merge语句还有一个强大的功能是通过OUTPUT子句,可以将刚刚做过变动的数据进行输出。

     1 merge into testsource as a
    2 using testdatasource as b
    3 on a.id=b.id
    4 when matched
    5 then update set a.[description]=b.[description] --更新相同的id数据
    6 when not matched
    7 then insert values(b.id,b.[description]) -- 目标表中没有的数据源表中有 将被插入
    8 when not matched by source
    9 then delete --目标表中有源表中没有将被删除
    10 output
    11 $action as [action],
    12 inserted.id as 插入的id,
    13 deleted.id as 删除的id;

    可以使用TOP关键字限制目标表被操作的行。

     1 merge top(3) testsource as a
    2 using testdatasource as b
    3 on a.id=b.id
    4 when matched
    5 then update set a.[description]=b.[description] --更新相同的id数据
    6 when not matched
    7 then insert values(b.id,b.[description]) -- 目标表中没有的数据源表中有 将被插入
    8 when not matched by source
    9 then delete --目标表中有源表中没有将被删除
    10 output
    11 $action as [action],
    12 inserted.id as 插入的id,
    13 deleted.id as 删除的id;


     

    OFFSET和FETCH关键字在2012中被引用

          SQL Server 2012中在Order By子句之后新增了OFFSET和FETCH子句来限制输出的行数从而达到了分页效果。OFFSET之后指定从哪条记录开始取。其中,取值的数可以是常量也可以是变量或者表达式。 然后通过FETCH关键字指定取多少条记录。这里取的记录条数也可以是常量或者变量表达式。

    语法:

    ORDER BY order_by_expression
        [ COLLATE collation_name ] 
        [ ASC | DESC ] 
        [ ,...n ] 
    [ <offset_fetch> ]
    
    
    <offset_fetch> ::=
    { 
        OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
        [
          FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
        ]
    }

     实例:

    1 --查询testsource表中第1001到1100条记录
    2 select * from testsource order by id offset 1000 row fetch next 100 rows only;

    Be laughted at dream, just have the value of realization.

  • 相关阅读:
    什么是跨域
    w3c标准
    什么是域名?什么网站名?什么是URL?
    meta是什么意思?
    什么是HTML、XML和XHTML
    html4.0.1,h5,xhml,文档声明区别
    checkbox 点击全选
    【今日CV 计算机视觉论文速览】Fri, 22 Mar 2019
    【机器翻译】API接口总结
    【今日CV 计算机视觉论文速览】Fri, 22 Mar 2019
  • 原文地址:https://www.cnblogs.com/aces/p/sql_newskeyword.html
Copyright © 2020-2023  润新知