SQL分页的几种方法

方法一 使用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分页的几种方法)