用SQL 2005里ROW_NUMBER()进行分页
今天用存储过程写了个分页,发现DB压力很大,于是改写了存储过程,决定试试发现效果不错,把部分代码公开出来和大家一起讨论吧.
1.说明:
ROW_NUMBER函数把一个序数值赋给每一个返回的记录,该序数值依赖于一个特定的与这个函数一起使用的ORDER BY语句。函数ROW_NUMBER的语法是:ROW_NUMBER() OVER([partition] ORDER BY子句)。
默认情况下,这个ROW_NUMBER函数把一个增量值(逐次加1)赋给结果集中的每一个记录。借助于可选的partition参数,无论何时分区(partitioning)列值发生变化,你都可以让ROW_NUMBER函数重新计算行数.
关于SQL Server 2005的T-SQL新特性,见文档:
http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp
2.SQL:
1.说明:
ROW_NUMBER函数把一个序数值赋给每一个返回的记录,该序数值依赖于一个特定的与这个函数一起使用的ORDER BY语句。函数ROW_NUMBER的语法是:ROW_NUMBER() OVER([partition] ORDER BY子句)。
默认情况下,这个ROW_NUMBER函数把一个增量值(逐次加1)赋给结果集中的每一个记录。借助于可选的partition参数,无论何时分区(partitioning)列值发生变化,你都可以让ROW_NUMBER函数重新计算行数.
关于SQL Server 2005的T-SQL新特性,见文档:
http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp
2.SQL:
DECLARE @pagenum AS INT, @pagesize AS INT
SET @pagenum = 1
SET @pagesize = 10
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER(ORDER BY a.MEMBER_ID desc ) AS rownum,
a.MEMBER_ID
,b.EMAIL
FROM SYS_USER a ,SYS_MEMBER b
WHERE a.MEMBER_ID=b.MEMBER_ID
)as TEMPTABLE
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
ORDER BY MEMBER_ID DESC
SET @pagenum = 1
SET @pagesize = 10
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER(ORDER BY a.MEMBER_ID desc ) AS rownum,
a.MEMBER_ID
,b.EMAIL
FROM SYS_USER a ,SYS_MEMBER b
WHERE a.MEMBER_ID=b.MEMBER_ID
)as TEMPTABLE
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
ORDER BY MEMBER_ID DESC
posted on 2008-01-18 19:50 郝奕 Frank Hao 阅读(235) 评论(0) 编辑 收藏 举报