方法一 使用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
网友评论