sqlserver的翻页sql

sqlserver的翻页sql,第1张

概述sqlserver中没有像mysql那样的limit,所以要分页就显示比较麻烦一点,传统上的asp程序中把结果集取出来再分页,显然在多数据的情况下这么做的速度是很慢的。 所以今天花了一点时间,模拟了一下mysql的分页方法。个人认为还是比较高效。那么我们就来看看sql: select top 30 * from user_admin where id<= (select min(id)


sqlserver中没有像MysqL那样的limit,所以要分页就显示比较麻烦一点,传统上的asp程序中把结果集取出来再分页,显然在多数据的情况下这么做的速度是很慢的。

所以今天花了一点时间,模拟了一下MysqL的分页方法。个人认为还是比较高效。那么我们就来看看sql:

select top 30 * from user_admin where ID<=     (select min(ID) from user_admin where ID in(      select top 1 ID from user_admin where admin_tour<>'yes' order by ID desc))and admin_tour<>'yes' order by ID desc

这第语句的作用就是对user_admin表分页,每页30条记录.

总的查询思想是:假设我们每页要取j条,当我们要取第n页的时候,那么我们把第n*j的记录都不算,从这个值的下一个值开始计算,再取出j条记录。那么这个结果就是我们想要的.

步骤分三步,

一是找到前面几页的记录数:

select top 1 ID from user_admin where admin_tour<>'yes' order by ID desc
这里的 top 1是变化的,第一页就是1,第二页就是1+n*j


第二步就是计算第一步找到的最最那条记录的ID.(示例中,我是按ID的降序排的,所以用了min函数).

select min(ID) from user_admin where ID in(      select top 1 ID from user_admin where admin_tour<>'yes' order by ID desc)

第三步就是我们真正想要的:在表中从这个值往后取n条记录,就是我们想要的记录集了.

select top 30 * from user_admin where ID<=     (select min(ID) from user_admin where ID in(      select top 1 ID from user_admin where admin_tour<>'yes' order by ID desc))and admin_tour<>'yes' order by ID desc


当然再把这个语句封装成存储过程,查询的效率就更快些。


网上有一个用not in 的方法,不过这种方法当数据量大时很耗时,效率不高.

总结

以上是内存溢出为你收集整理的sqlserver的翻页sql全部内容,希望文章能够帮你解决sqlserver的翻页sql所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1178348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存