原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_source=brnewsletter&utm_medium=email&utm_campaign=2012Apr

SQL Server 2005 引入了 ROW_NUMBER()来提供一种容易的分页方式。 SQL Server 2012 添加了另外一种更简单高效的分页方式。

  1.  
    /*
  2.  
    执行脚本去创建这个表并插入数据。
  3.  
    */
  4.  
    IF OBJECT_ID('Customers','U') IS NOT NULL
  5.  
    DROP TABLE Customers
  6.  
     
  7.  
    CREATE TABLE Customers (
  8.  
    CustomerID INT,
  9.  
    CustomerNumber CHAR(4),
  10.  
    CustomerName VARCHAR(50),
  11.  
    CustomerCity VARCHAR(20) )
  12.  
    GO
  13.  
     
  14.  
    INSERT INTO Customers (
  15.  
    CustomerID, CustomerNumber, CustomerName, CustomerCity
  16.  
    )
  17.  
    SELECT
  18.  
    Number,
  19.  
    REPLACE(STR(Number, 4), ' ', '0'),
  20.  
    'Customer ' + STR(number,6),
  21.  
    CHAR(65 + (number % 26)) + '-City'
  22.  
    FROM master..spt_values WHERE type = 'p'
  23.  
    AND number BETWEEN 0 AND 999
  24.  
     
  25.  
    /*
  26.  
    用ROW_NUMBER()的分页示例- SQL Server 2005/2008 版本。
  27.  
    */
  28.  
     
  29.  
    DECLARE @page INT, @size INT
  30.  
    SELECT @page = 3, @size = 10
  31.  
     
  32.  
    ;WITH cte AS (
  33.  
    SELECT TOP (@page * @size)
  34.  
    CustomerID,
  35.  
    CustomerName,
  36.  
    CustomerCity,
  37.  
    ROW_NUMBER() OVER(ORDER BY CustomerName ) AS Seq,
  38.  
    COUNT(*) OVER(PARTITION BY '') AS Total
  39.  
    FROM Customers
  40.  
    WHERE CustomerCity IN ('A-City','B-City')
  41.  
    ORDER BY CustomerName ASC
  42.  
    )
  43.  
    SELECT
  44.  
    *
  45.  
    FROM cte
  46.  
    WHERE seq BETWEEN (@page - 1 ) * @size + 1 AND @page * @size
  47.  
    ORDER BY seq
  48.  
     
  49.  
    /*
  50.  
    SQL Server 2012中新添加的分页示例
  51.  
    */
  52.  
     
  53.  
    DECLARE @page INT, @size INT
  54.  
    SELECT @page = 3, @size = 10
  55.  
     
  56.  
    SELECT
  57.  
    *,
  58.  
    COUNT(*) OVER(PARTITION BY '') AS Total
  59.  
    FROM Customers
  60.  
    WHERE CustomerCity IN ('A-City','B-City')
  61.  
    ORDER BY CustomerID
  62.  
    OFFSET (@page -1) * @size ROWS
  63.  
    FETCH NEXT @size ROWS ONLY;
  64.  
     
  65.  
    /*
  66.  
    同时执行这两个版本,打开执行计划,你可以注意到在这个例子中显著的性能差异。
  67.  
    */

SQL Server 2012 OFFSET/FETCH NEXT分页示例的更多相关文章

  1. SQL Server 2012 OFFSET/FETCH NEXT分页示例(转载)

    原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-sid ...

  2. SQL Server使用Offset/Fetch Next实现分页

    T-SQL实现分页 ,查找指定范围内的数据 首先,正常的查询是这样的 使用分页后 select * from Products order by ProductID offset X rows fet ...

  3. SQL Server 2012使用Offset/Fetch Next实现分页

    在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows onl ...

  4. Sql Server 2012 的新分页方法分析(offset and fetch) - 转载

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...

  5. SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试

    最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页.多数文章都是引用或者翻译的这一篇<SQL Server 2012 - Serv ...

  6. Sql Server 2012 分页方法分析(offset and fetch)

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中  offse ...

  7. SQLServer · 最佳实践 · SQL Server 2012 使用OFFSET分页遇到的问题

    1. 背景 最近有一个客户遇到一个奇怪的问题,以前使用ROW_NUMBER来分页结果是正确的,但是替换为SQL SERVER 2012的OFFSET...FETCH NEXT来分页出现了问题,因此,这 ...

  8. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试(转)

    原文地址:http://www.cnblogs.com/downmoon/archive/2012/04/19/2456451.html 在<SQL Server 2012服务端使用OFFSET ...

  9. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]

    SQL Server 2008中SQL应用系列--目录索引 前些天看到一篇文章<SQL Server 2012 - Server side paging demo using OFFSET/FE ...

随机推荐

  1. 使用pace监控ajax踩过的坑

    使用vue.js开发移动端的活动页面时,有时候会出现因为请求的数据没有返回而使得当前活动页结构混乱或者不美观,这个时候可以考虑使用pace.js,通过设置参数值,在ajax全部请求结束之前显示load ...

  2. HPU 1471:又是斐波那契数列??(大数取模)

    1471: 又是斐波那契数列?? 时间限制: 1 Sec 内存限制: 128 MB 提交: 278 解决: 27 统计 题目描述 大家都知道斐波那契数列吧?斐波那契数列的定义是这样的: f0 = 0; ...

  3. BZOJ1835,LG2605 [ZJOI2010]基站选址

    题意 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为\(D_i\) 需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为\(C_i\) 如果在距离第i个村 ...

  4. gRPC-Web is going GA

    原文: https://www.cncf.io/blog/2018/10/24/grpc-web-is-going-ga On behalf of the Cloud Native Computing ...

  5. 使用ioctl获取网卡统计信息

    ethtool -S获取接口统计信息总共分三步: 1.获取统计项个数,使用SIOCETHTOOL+ETHTOOL_GSSET_INFO 2.(可选)获取统计项名字,使用SIOCETHTOOL+ETHT ...

  6. java中Thread类分析

    创建线程的方式有三种,一是创建Thread实例,二是实现Runnable接口,三是实现Callable接口,Runnable接口和Callable接口的区别是一个无返回值,一个有返回值:不管是Runn ...

  7. Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复

    Oracle RAC 中OCR 和Voting Disk 备份在我的blog: Oracle RAC 常用维护工具和命令 中已经有说明,现在再次把它单独拿出做一个说明, 因为OCR 和Voting D ...

  8. Angular 4 管道

    一.date管道 1.html 2. 控制器中的定义brithday 3.效果图 如果时间格式 为: 我的生日是{{birthday | date:'yyyy-MM-dd HH:mm:ss'}} 则效 ...

  9. 【jmeter】jMeter使用Badboy录制Web测试脚本

    JMeter 是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放 功能,同时提供图形结果分析功能,刚好弥补 ...

  10. sublime text3安装 mac os汉化/常用模块

    sublime text介绍: Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由 ...