注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚楼听风雨

没有理想的人,永远也不能翱翔与蓝天白云之上~

 
 
 

日志

 
 

用SQL实现分页的三种方法  

2008-09-09 18:33:11|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

表中主键必须为标识列,[ID] int IDENTITY (1,1)

 

   1.分页方案一:(利用Not In和SELECT TOP分页)

 

 语句形式:

 SELECT TOP 10 *

 FROM TestTable

 WHERE (ID NOT IN

           (SELECT TOP 20 id

          FROM TestTable

          ORDER BY id))

 ORDER BY ID

 

 

 SELECT TOP 页大小 *

 FROM TestTable

 WHERE (ID NOT IN

           (SELECT TOP 页大小*页数 id

          FROM 表

          ORDER BY id))

 ORDER BY ID

 

    2.分页方案二:(利用ID大于多少和SELECT TOP分页)

   3.分页方案三:(利用SQL的游标存储过程分页)

 create  procedure SqlPager

 @sqlstr nvarchar(4000), --查询字符串

 @currentpage int, --第N页

 @pagesize int --每页行数

 as

 set nocount on

 declare @P1 int, --P1是游标的id

  @rowcount int

 exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

 select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 

 set @currentpage=(@currentpage-1)*@pagesize+1

 exec sp_cursorfetch @P1,16,@currentpage,@pagesize 

 exec sp_cursorclose @P1

 set nocount off

 

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

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

 

 通过SQL 查询分析器,显示比较:我的结论是:

 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

 分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句

 分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

语句形式:

   SELECT TOP 10 *

 FROM TestTable

 WHERE (ID >

           (SELECT MAX(id)

          FROM (SELECT TOP 20 id

                  FROM TestTable

                  ORDER BY id) AS T))

 ORDER BY ID

 

 

 SELECT TOP 页大小 *

 FROM TestTable

 WHERE (ID >

           (SELECT MAX(id)

          FROM (SELECT TOP 页大小*页数 id

                  FROM 表

                  ORDER BY id) AS T))

 ORDER BY ID

  评论这张
 
阅读(136)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017