Sqlserver 数据库分页查询(三种方式)

--第一种分页:sqlserver 2000-sqlserver2005
--假设:每页显示5条, 当前页:1  则查询1-5
--不等于前5条的前5条
select top 5 * from  Student
where StuNo not in(select top 5 StuNo from  Student)


--第二种分页查询: sqlserver 2008-sqlserver2012

select * from Student

-- row_number()over()  组合函数,给查询结果创建行号 (伪列)
declare 
@pageIndex int=1,@pageSize int =5,---用户参数,定义页码和每页数量
@startIndex int,@endIndex int--查询参数

set @startIndex=(@pageIndex-1)*@pageSize+1 --开始位置
set @endIndex=@pageIndex*@pageSize --结束位置

select * from 
(
  select ROW_NUMBER()over(order by StuNo asc) id,*  from  Student
)Student
where id between @startIndex and @endIndex


--第三种分页查询: sqlserver 2012-sqlserver2021 (最新-推荐使用)
 select * from Student
---查询筛选:offset 1 rows 从多少开始
---          fetch next 5  选择多少条数据
---         rows only

declare ---用户参数
@pageIndex3 int=1,---定义页码
@pageSize3 int =5,---定义每页数量
@startIndex3 int --查询参数
set @startIndex3=(@pageIndex3 -1)*@pageSize3 --计算开始位置

select * from Student
order by StuNo asc
offset @startIndex3 rows
fetch next @pageSize3
row only