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

posted @ 2023-03-07 14:50  空岛迷梦  阅读(707)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css