SQL Server 分页查询语句
1.分页查询1:
必须带有主键 ID,且主键ID 是标识列,必须是自增的。
原理:需要拿出数据库的第5页,就是40-50条记录,首先拿出数据库中的前40条记录的 ID 值,然后再拿出剩余部分的前 10 条元素。
declare @pagesize int;
select @pagesize = 5;
declare @pageindex int;
select @pageindex = 3;
select top (@pagrrsize) * from ScoreFoNew2 where id not in
(
'(10*(2-1))为页大小*当前第几页-1
select top (@pagesize*(@pageindex-1)) id from ScoreInfoNew2 order by id
)
order by id
2.分页查询2:
原理:先查询前40条记录,然后获得其 ID 值,如果 ID 值为null的,那么就返回0;然后查询 id 值大于前40条记录的最大 id 值的记录。
这个查询有一个条件,就是 id 必须是 int 类型的。
declare @pagesize int;
select @pagesize = 5;
declare @pageindex int;
select @pageindex = 3;
select top (@pagrrsize) * from ScoreFoNew2 where id >
(
select isnull(max(id),0) from
(
'(10*(2-1))为页大小*当前第几页-1
select top (@pagesize*(@pageindex-1)) id from ScoreInfoNew2 order by id
) A
)
order by id
3.分页查询3:
原理:先把表中的所有数据都按照一个 rowNumber 运行培训,然后查询 rowNumber 大于40的前十条记录,这种方法和 oracle 中的一种分页方式类似,不过只支持 2005 版以上的。
declare @pagesize int;
select @pagesize = 5;
declare @pageindex int;
select @pageindex = 3;
select top (@pagrrsize) * from
(
select row_number() over(order by id) as rownumber, * from ScoreInfoNew2
) A
'(10*(2-1))为页大小*当前第几页-1
where rownumber > (@pagesize * (@pageindex-1))
分页查询4
要求必须在 SQL server 2012 版本之后方可支持。
declare @pagesize int;
select @pagesize = 5;
declare @pageindex int;
select @pageindex = 3;
select * from ScoreFoNew2 order by id
offset (@pagesize(@pageindex-1)) '间隔多少条开始
rows fetch next (@pagesize) '获取多少条
rows only