经典的:
--------------------------------------------------------------------------------
1.“俄罗斯存储过程”的改良版 CREATE procedure pagination1 (@pagesize int, --页面大小,如每页存储20条记录 @pageindex int --当前页码 ) as set nocount on begin declare @indextable table(id int identity(1,1),nid int) --定义表变量 declare @PageLowerBound int --定义此页的底码 declare @PageUpperBound int --定义此页的顶码 set @PageLowerBound=(@pageindex-1)*@pagesize set @PageUpperBound=@PageLowerBound+@pagesize set rowcount @PageUpperBound insert into @indextable(nid) select gid from TGongwen where fariqi >dateadd(day,-365,getdate()) order by fariqi desc select O.gid,O.mid,O.title,O.fadanwei,O.fariqi from TGongwen O,@indextable t where O.gid=t.nid and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id end set nocount off
2. not in 的方法: 从publish 表中取出第 n 条到第 m 条的记录: id 为publish 表的关键字
--------------------------------------------------------------------------------
2. max 的方法: select top 页大小 * from table1 where id> (select max (id) from (select top ((页码-1)*页大小) id from table1 order by id) as T ) order by id
-------------------------------------------------------------------------------- 下面的才是重点 —— 我研究的算法。如有雷同,属于英雄所见略同! 1、追求高效的翻页算法 —— 定位法。 declare @pageSize int --返回一页的记录数 declare @Count int set @pageSize=10 --定位 if @CurPage > 0 --返回记录 set rowcount 0
也就是这个思路:Select top 10 * from table1 where id>200 定位 —— 就是说要找到“临界点”,分页的临界点。找到了之后剩下的事情就好办了。 缺点:单字段排序、排序字段的值不能重复(不是绝对不能重复,可以有少量的重复)。
--------------------------------------------------------------------------------
有的时候“定位法”的缺点是不可以接受的,但是没有关系,可以用这个的。 select * from table where id in
缺点:必须有主键。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jww2002/articles/558151.aspx |
|