sql server分页查询语句的多种方案

发布时间:2020-09-01编辑:脚本学堂
有关sql server分页查询语句的几种方案,不使用游标,而用sql存储过程来实现分页查询代码,预编译效率高,一起学习下。

在创建sql分页查询语句时,尽量使用存储过程,而不要用游标。

使用存储过程实现sql分页代码,存储过程是经过预编译的,执行效率高,也更灵活。

首先,来看下单条 sql 语句的分页查询。

方法1:
适用于 sql server 2000/2005
 

复制代码 代码示例:
select top 页大小 *
from table1
where id not in
(
select top 页大小*(页数-1) id from table1 order by id
)
order by id

方法2:
适用于 sql server 2000/2005
 

复制代码 代码示例:
select top 页大小 *
from table1
where id >
(
select isnull(max(id),0)
from
(
select top 页大小*(页数-1) id from table1 order by id
) a
)
order by id

方法3:
适用于 sql server 2005
 

复制代码 代码示例:
select top 页大小 *
from  (
  select row_number() over (order by id) as rownumber,* from table1
  ) a
where rownumber > 页大小*(页数-1)

说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。

其它方案:
如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

建议,sql查询优化时加上主键和索引,查询效率会提高。

通过sql 查询分析器,显示比较:
分页方案二:(利用id大于多少和select top分页)效率最高,需要拼接sql语句
分页方案一:(利用not in和select top分页)   效率次之,需要拼接sql语句
分页方案三:(利用sql的游标存储过程分页)    效率最差,但是最为通用