千家信息网

SQL server有哪些分页方法

发表于:2026-10-30 作者:千家信息网编辑
千家信息网最后更新 2026年10月30日,这篇文章主要讲解了"SQL server有哪些分页方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SQL server有哪些分页方法"吧!这篇讲的是
千家信息网最后更新 2026年10月30日SQL server有哪些分页方法

这篇文章主要讲解了"SQL server有哪些分页方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SQL server有哪些分页方法"吧!

这篇讲的是SQL server的分页方法,用的SQL server 2012版本。下面都用pageIndex表示页数,pageSize表示一页包含的记录。并且下面涉及到具体例子的,设定查询第2页,每页含10条记录。

首先说一下SQL server的分页与MySQL的分页的不同,mysql的分页直接是用limit (pageIndex-1),pageSize就可以完成,但是SQL server 并没有limit关键字,只有类似limit的top关键字。所以分页起来比较麻烦。

  SQL server分页我所知道的就只有四种:三重循环;利用max(主键);利用row_number关键字,offset/fetch next关键字(是通过搜集网上的其他人的方法总结的,应该目前只有这四种方法的思路,其他方法都是基于此变形的)。

要查询的学生表的部分记录

方法一:三重循环

思路

  先取前20页,然后倒序,取倒序后前10条记录,这样就能得到分页所需要的数据,不过顺序反了,之后可以将再倒序回来,也可以不再排序了,直接交给前端排序。

  还有一种方法也算是属于这种类型的,这里就不放代码出来了,只讲一下思路,就是先查询出前10条记录,然后用not in排除了这10条,再查询。

代码实现
-- 设置执行时间开始,用来查看性能的set statistics time on ;-- 分页查询(通用型)select * from (select top pageSize * from (select top (pageIndex*pageSize) * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。as temp_sum_student order by sNo desc ) temp_orderorder by sNo asc-- 分页查询第2页,每页有10条记录select * from (select top 10 * from (select top 20 * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。as temp_sum_student order by sNo desc ) temp_orderorder by sNo asc;
查询出的结果及时间

方法二:利用max(主键)

  先top前11条行记录,然后利用max(id)得到最大的id,之后再重新再这个表查询前10条,不过要加上条件,where id>max(id)。

代码实现
set statistics time on;-- 分页查询(通用型)select top pageSize * from student where sNo>=(select max(sNo) from (select top ((pageIndex-1)*pageSize+1) sNofrom student order by  sNo asc) temp_max_ids) order by sNo;-- 分页查询第2页,每页有10条记录select top 10 * from student where sNo>=(select max(sNo) from (select top 11 sNofrom student order by  sNo asc) temp_max_ids) order by sNo;
查询出的结果及时间

方法三:利用row_number关键字

  直接利用row_number() over(order by id)函数计算出行数,选定相应行数返回即可,不过该关键字只有在SQL server 2005版本以上才有。

SQL实现
set statistics time on;-- 分页查询(通用型)select top pageSize * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_rowwhere rownumber>((pageIndex-1)*pageSize);set statistics time on;-- 分页查询第2页,每页有10条记录select top 10 * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_rowwhere rownumber>10;
查询出的结果及时间

第四种方法:offset /fetch next(2012版本及以上才有)

代码实现
set statistics time on;-- 分页查询(通用型)select * from studentorder by sno offset ((@pageIndex-1)*@pageSize) rowsfetch next @pageSize rows only;-- 分页查询第2页,每页有10条记录select * from studentorder by sno  offset 10 rowsfetch next 10 rows only ;

offset A rows ,将前A条记录舍去,fetch next B rows only ,向后在读取B条数据。

结果及运行时间

封装的存储过程

最后,我封装了一个分页的存储过程,方便大家调用,这样到时候写分页的时候,直接调用这个存储过程就可以了。

分页的存储过程

create procedure paging_procedure(       @pageIndex int, -- 第几页        @pageSize int  -- 每页包含的记录数)asbegin         select top (select @pageSize) *     -- 这里注意一下,不能直接把变量放在这里,要用select        from (select row_number() over(order by sno) as rownumber,*                         from student) temp_row         where rownumber>(@pageIndex-1)*@pageSize;end-- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程exec paging_procedure @pageIndex=2,@pageSize=10;

总结

  根据以上四种分页的方法执行的时间可以知道,以上四种分页方法中,第二,第三,第三四种方法性能是差不多的,但是第一种性能很差,不推荐使用。还有就是这篇博客这是测试了小量数据,还没有分页大量数据,所以不清楚在大量数据要分页时哪种方法的性能更加好。我这里推荐第四种,毕竟第四种是SQL server公司升级后推出的新方法,所以应该理论上性能和可读性都会更加好。

感谢各位的阅读,以上就是"SQL server有哪些分页方法"的内容了,经过本文的学习后,相信大家对SQL server有哪些分页方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 查询 关键 关键字 时间 结果 性能 数据 过程 存储 代码 只有 思路 通用型 排序 倒序 就是 版本 学习 到时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 上海卓越科技互联网 广州大一互联网络科技有限公司 广州紫鲸互联网科技有限公司 壹账通互联网科技 汇久创客互联网科技 沃里互联网科技 米客互联网科技 互联网科技公司有哪些 多迪互联网科技有限公司 美国互联网前沿科技 海南购全球互联网科技 中化能源互联网科技招聘 互联网科技与管理 伊宁互联网科技做什么的 世界互联网科技成果奖 互联网科技手机排行榜 中国互联网公司的科技投入 山东蛋芒互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 互联网科技公司的优势 深圳科技互联网 北京禾田雨橡互联网科技 富国互联网科技创新基金 湖南洣水互联网科技有限公司扣款 栖莱科技互联网股份有限公司 辽宁互联网新科技 工业互联网等科技实现智能化赋能 启辰互联网科技 互联网大会出现的黑科技
0