原文: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. OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏

    自动释放池: @autoreleasepool { } 内存管理机制       谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...

  2. dir matlab

    %file=dir('D:\dataset\temp');file=dir('D:\dataset\INRIAPerson\test_64x128_H96\pos');for i=3:length(f ...

  3. Markdown的写法

    这里只介绍Markdown的书写格式.在github中显示出来. 当你看到下面两张图片时,你会发现区别还是蛮大的. 标题: 首先>就是最左边的那条竖线,但是=(最高阶标题)和-(第二阶标题). ...

  4. ubuntu12.04 alternate win7 双系统安装

    ubuntu alternate的安装比desktop复杂一点,因为alternate的安装过程有个步骤是检测cd-rom,如果你是刻盘安装,自然没问题,但是,现在的安装一般是将系统刻到U盘里,或者在 ...

  5. HihoCoder - 1886 :中位数2(贪心)

    描述 对于一个长度为n的数列A,我们如下定义A的中位数med(A): 当n是奇数时,A的中位数是第(n+1)/2大的数:当n是偶数时,A的中位数是第n/2大的数和第n/2+1大的数的平均值. 同时,我 ...

  6. vue components

    https://github.com/vuejs/awesome-vue#components--libraries

  7. LeetCode Single Number I II Python

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

  8. C语言运算符优先级和ASCII表

    1. C语言运算符优先级及结合性 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成 ...

  9. Cygwin安装与使用入门

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/canlets/article/details/28646115 对于 UNIX 本身,也有各种称呼. ...

  10. 解决 php提交表单到当前页面,刷新会重复提交 的问题

    http://blog.csdn.net/u012466451/article/details/68952280