SQL分页的几种方法

作者: 飞天猪Pony | 来源:发表于2020-01-02 17:29 被阅读0次

    方法一 使用offset fetch next(2012版本及以上版本才可以使用)

    注:参数 @pageIndex 代表页数;@pageSize 代表每页的数据条数
    select * from [表名] 
    offset ((@pageIndex - 1) * @pageSize) rows
    fetch next @pageSize rows only
    
    --------------------------------------------------------------------------------------
    例如:获取第2页的数据,每页10条数据
    select * from [dbo].[Student] 
    offset ((2 - 1) * 10) rows
    fetch next 10 rows only
    

    方法二 使用row_number()函数
    利用row_number() over(order by id desc)函数计算出行数,选定相应的行数返回即可(2005版本以上才可以使用)

    select top @pageSize * 
    from (select row_number() over (order by id desc) as rownumber, * from [表名]) as T
    where rownumber > (@pageIndex - 1) * @pageSize
    --------------------------------------------------------------------------------------
    例如:获取第2页的数据,每页10条数据
    select top 10 *
    from (select row_number() over (order by id desc) as rownumber, * from [dbo].[Student]) as T
    where rownumber > (2 - 1) * 10
    

    使用存储过程封装

    create procedure paging_proc
    (
        @pageIndex int, --页数
        @pageSize int, --每页的数量
    )
    as 
    begin
      select top @pageSize 
      * from (select row_number() over(order by ID desc) as rownumber,
      * from [表名] ) as T
      where rownumber > (@pageIndex - 1) * @pageSize
    end
    
    --测试执行存储过程的方法
    exec paging_proc @pageIndex=2,@pageSize=10
    

    相关文章

      网友评论

        本文标题:SQL分页的几种方法

        本文链接:https://www.haomeiwen.com/subject/knyooctx.html