过去用SQL Server 2000分页的,大多都用到了临时表。SQL Server 2005 ROW_NUMBER 函数支持分页,性能据说也非常不错。

Paging Records Using SQL Server 2005 Database
Paging in SQL Server 2005
Sql Server 2005自定义分页

最近MSDN Magazine上的一篇文章10 Tips for Writing High-Performance Web Applications提到了有效的数据分页技术对提高ASP .NET程序性能的重要性;并给出了一个实现数据分页的stored procedure的例子,抄录如下:

CREATE PROCEDURE northwind_OrdersPaged
(
    @PageIndex int,
    @PageSize int
)
AS
BEGIN
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @RowsToReturn int
-- First set the rowcount
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
SET ROWCOUNT @RowsToReturn
-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
-- Create a temp table to store the select results
CREATE TABLE #PageIndex
(
    IndexId int IDENTITY (1, 1) NOT NULL,
    OrderID int
)
-- Insert into the temp table
INSERT INTO #PageIndex (OrderID)
SELECT
    OrderID
FROM
    Orders
ORDER BY
    OrderID DESC
-- Return total count
SELECT COUNT(OrderID) FROM Orders
-- Return paged results
SELECT
    O.*
FROM
    Orders O,
    #PageIndex PageIndex
WHERE
    O.OrderID = PageIndex.OrderID AND
    PageIndex.IndexID > @PageLowerBound AND
    PageIndex.IndexID < @PageUpperBound
ORDER BY
    PageIndex.IndexID
END
在SQL Server 2000里面,由于没有一个有效的进行ranking操作的方法,所以该例子先创建了一个有Identity字段的临时表,利用Identity字段的自增长特性,间接的为Orders表的每一行按orderID逆序赋予了一个行号, 然后基于这个行号实现分页。
在SQL Server 2005里面,由于系统提供了内建的ranking函数,为了给Orders表生成行号,我们不再需要利用Identity字段。
例如,利用SQL Server 2005的ROW_NUMBER()函数,按orderID字段逆序排列,给Orders表生成行号的语句如下:
 
SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered
FROM Orders
ORDER BY rownum DESC
基于这些新的ranking函数,您可以跟方便的实现数据的分页操作。
关于SQL Server 2005的T-SQL新特性,见文档:
[url]http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp[/url]
自由、创新、研究、探索……

转载于:https://blog.51cto.com/shanyou/75024

Sql Server 2005 ROW_NUMBER 函数实现分页相关推荐

  1. SQL Server使用ROW_NUMBER函数进行分页

    2019独角兽企业重金招聘Python工程师标准>>> ALTER PROCEDURE PROC_PAGEING@qCols varchar(4000), -- 查询列 @qTabl ...

  2. SQL Server 2005 MD5函数

    原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...

  3. Sql Server 2005 row_number()分页性能测试

    现在分页方法大多集中在select top/not in/游标/row_number,而select top分页(在这基础上还有二分法)方法似乎更受大家欢迎,这篇文章并不打算去讨论是否通用的问题,本着 ...

  4. SQL Server 2005 用户自定义函数

    (<SQL Server 2005 编程入门经典> 第13章) 用户自定义函数和存储过程非常相似,但它们也有一些行为和能力的区别. 13.1 UDF的定义 用户自定义函数是有序的T-SQL ...

  5. SQL Server中row_number函数用法介绍

    一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 语法实例: ...

  6. Sql Server中Row_Number()函数

    1.使用row_number()函数进行编号:如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Cu ...

  7. 【SQL server】ROW_NUMBER()函数使用方法

    ROW_NUMBER() OVER ([ <partition_by_clause> ] <order_by_clause>) 最近发现这个函数非常好用,用途较多,可以解决一些 ...

  8. Microsoft SQL Server 2005 查询分页

    微软新的SQL Server 2005新增了数据库分页功能,以后再也用写复杂不灵活而低效率的分页存储过程. 新的数据库分页功能的核心是一个叫row_number的函数 具体如下: 返回结果集分区内行的 ...

  9. 无废话-SQL Server 2005新功能(1) - TSQL

    无废话-SQL Server 2005新功能(1) - TSQL SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的. 举几个例子来简单说明 这些例子我引用 ...

最新文章

  1. Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
  2. python第三方库下载-python 第三方库下载
  3. Linux下文件查找命令find笔记
  4. 执行了rm-f,除了跑路,如何恢复?
  5. Redis持久化配置
  6. 全文搜索引擎 Elasticsearch 安装
  7. 同态加密 应用案例 入门
  8. 网上阅卷系统服务器,网上阅卷系统是什么?
  9. 基于springboot网上书城系统
  10. 360浏览器不弹出java窗口_360浏览器不弹出新窗口怎么办
  11. Axure中继器基础教程(增行、删当前、标记、全部、规则行) Mark
  12. BAT校招产品经理:52道经典面试问题解答思路
  13. Android跳转小项目-CHANGE页面-Recycylerview、List、Context(二)
  14. windows 全系列电脑加速,告别电脑“卡”的时代
  15. 计算机恢复桌面,桌面图标打开方式怎么还原_电脑图标打开方式恢复方法-win7之家...
  16. 阿里云ECS之下载与安装SSH(二)
  17. ArchieOpenGL教程扩展一:修改背景色颜色
  18. FL STUDIO 21中文版已经发布啦,有什么新功能?
  19. pandownload使用cookie登录
  20. 在国企的日子(第四章 团建)

热门文章

  1. 1.简单认识PHP和环境搭建
  2. hdu4990 矩阵快速幂
  3. 【错误记录】Android 文件分享 FileProvider 设置错误
  4. 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )
  5. 【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )
  6. Mysql字段类型选择
  7. CoreData多线程
  8. U盘无法安装win10提示Your PC/Device needs to be repaired
  9. Android ContentProvider介绍
  10. HDU 3374 String Problem (KMP+最大最小表示)