用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:
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



posted on 2008-01-18 19:50  郝奕 Frank Hao  阅读(235)  评论(0编辑  收藏  举报

导航