星空网 > 软件开发 > 数据库

行号分页

上一篇的博客是子查询分页,在数据量大的情况下,分页的效率是非常低。今天来讲一下行号分页,这个是用的比较多的。

数据库还是用Northwind数据库。就用Orders表为例子吧,假设每页都显示10条记录。

我们先查询第一页的数据。

SELECT *FROM  ( SELECT  ROW_NUMBER() OVER ( ORDER BY OrderID ) AS RowNumber ,          *     FROM   Orders    ) TWHERE  RowNumber BETWEEN 1 AND 10

这里用到一个函数ROW_NUMBER() OVER函数,这个函数的语法是ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY OrderID) 是先把OrderID列升序,再为升序以后的每条记录返回一个序号。 

接下来,查询第二页的数据。

SELECT *FROM  ( SELECT  ROW_NUMBER() OVER ( ORDER BY OrderID ) AS RowNumber ,          *     FROM   Orders    ) TWHERE  RowNumber BETWEEN 11 AND 20

由此可以推断出,第N页的数据为

SELECT *FROM  ( SELECT  ROW_NUMBER() OVER ( ORDER BY OrderID ) AS RowNumber ,          *     FROM   Orders    ) TWHERE  RowNumber BETWEEN (N-1)*10+1 AND N*10

写成通用的SQL语句如下:

BEGIN  DECLARE @PageSize INT   --每页显示条数  DECLARE @PageIndex INT  --页码(从1开始)  SET @PageSize = 10  SET @PageIndex = 2  SELECT *  FROM  ( SELECT  ROW_NUMBER() OVER ( ORDER BY OrderID ) AS RowNumber ,            *       FROM   Orders      ) T  WHERE  RowNumber BETWEEN ( ( @PageIndex - 1 ) * @PageSize + 1 )           AND   ( @PageIndex * @PageSize )  ORDER BY OrderID ASCEND

写成存储过程如下:

--存储过程CREATE PROCEDURE P_GetPagedOrders2  @PageSize INT ,       --每页显示条数  @PageIndex INT ,      --页码(从1开始)  @RecordCount INT OUTPUT ,  --数据总数  @PageCount INT OUTPUT    --总页数AS  BEGIN    --获取数据总数    SELECT @RecordCount = COUNT(1)    FROM  dbo.Orders    --计算总页数    SET @PageCount = @RecordCount / @PageSize    IF @RecordCount % @PageSize > 0      BEGIN        SET @PageCount = @PageCount + 1      END    --获取当前页的数据    SELECT *    FROM  ( SELECT  ROW_NUMBER() OVER ( ORDER BY OrderID ) AS RowNumber ,              *         FROM   Orders        ) T    WHERE  RowNumber BETWEEN ( ( @PageIndex - 1 ) * @PageSize + 1 )             AND   ( @PageIndex * @PageSize )    ORDER BY OrderID ASC  END

测试存储过程

DECLARE  @RecordCount int,      @PageCount intEXEC  [P_GetPagedOrders2]    @PageSize = 10,    @PageIndex = 2,    @RecordCount = @RecordCount OUTPUT,    @PageCount = @PageCount OUTPUTSELECT  @RecordCount as N'@RecordCount',    @PageCount as N'@PageCount'

测试结果如下

行号分页

不足之处,还望各位大神指正,不胜感激。




原标题:行号分页

关键词:分页

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亿丰电商:https://www.ikjzd.com/w/1526
华强G90_跨境高速孵化专列:https://www.ikjzd.com/w/1527
柏励科技:https://www.ikjzd.com/w/1528
即刻跨境:https://www.ikjzd.com/w/1529
overstock:https://www.ikjzd.com/w/153
CCEE_雨果网:https://www.ikjzd.com/w/1530
船底顶攻略(船底顶最详细攻略):https://www.vstour.cn/a/411239.html
川藏线自驾游要怎么走才比较划算呢?:https://www.vstour.cn/a/411240.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流