博客
关于我
【SqlServer】解析SqlServer的分页
阅读量:404 次
发布时间:2019-03-05

本文共 1470 字,大约阅读时间需要 4 分钟。

方式1:

  假设页数是10,现在要拿出第5页的内容,查询语句如下:
  --10代表分页的大小

select top 10 *from testwhere id not in( --40是这么计算出来的:10*(5-1) select top 40 id from test order by id)order by id

  原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素

方式2:
  还是以上面的结果为例,采用另外的一种方法
  --数据的意思和上面提及的一样

select top 10 *from testwhere id >( select is null(max(id),0) from  (   select top 40 id from test order by id  ) A)order by id

   原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0,然后查询id值大于前40条记录的最大id值的记录。这个查询有一个条件,就是id必须是int类型的。

 方式3:

select *    from    (        select *,row_number() over(order by id) as rownumber,* from test    ) Awhere rownumber > 40 and  rownumber<=50;

   原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录。

  这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的

 方式4:

  这种方式更加简便,和好理解。

SELECT * FROM TestTable order by id offset 40 ROWS FETCH NEXT 10 ROWS only

 

 

这里对这四种方式做一下分析,

第一种方式在查询的数据量很大的时候,性能会比较差。

第二种方式中,如果id是一个IDENTITY (1,1)类型的数据话,那么上面那种查询语句就可以进行如下优化:

select * from test where id>@page-1 and id<=@page-1+@pageSize

当然最好的情况是给id建立聚集索引,效果最好。如果表中没有这样的字段,那么推荐使用第三种方式。

第三种方式,这种方式首先是通过row_number对查询出来的列进行编号,然后再通过列进行选取数据,如果表非常大的话,那么进行编号的过程将会比较吃力。

第四种方式,这种方式比较好写,从上面可以看出,offset是对id起作用的,所以必须要有 order by id ,或者 order by 其它字段 也可以。

 接下创建一个存储过程:

  存储过程查询   创建存储过程alter procedure pageDemo@pageSize int,@page intASdeclare @temp intset @temp=@pageSize*(@page - 1)begin select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by idend

执行存储过程

exec  pageDemo 10,5

 

转载地址:http://cehzz.baihongyu.com/

你可能感兴趣的文章
NET Framework安装失败的麻烦
查看>>
Net 应用程序如何在32位操作系统下申请超过2G的内存
查看>>
Net.Framework概述
查看>>
NET3.0+中使软件发出声音[整理篇]<转>
查看>>
net::err_aborted 错误码 404
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetAssist网络调试工具使用指南 (附NetAssist工具包)
查看>>
Netbeans 8.1启动参数配置
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
NetBeans之JSP开发环境的搭建...
查看>>
NetBeans之改变难看的JSP脚本标签的背景色...
查看>>
netbeans生成的maven工程没有web.xml文件 如何新建
查看>>
netcat的端口转发功能的实现
查看>>
NetCore 上传,断点续传,可支持流上传
查看>>
Netcraft报告: let's encrypt和Comodo发布成千上万的网络钓鱼证书
查看>>
Netem功能
查看>>
netfilter应用场景
查看>>
Netflix:当你按下“播放”的时候发生了什么?
查看>>
Netflix推荐系统:从评分预测到消费者法则
查看>>
netframework 4.0内置处理JSON对象
查看>>