分页时,取指定页的数据。
分页思路:
1、可以一次性取出所有数据,缓存起来,每次翻页从缓存中获取数据。
2、需要多少取多少,即每次翻页只取一页数据。
分析:
思路1在大数据量操作时将占用较多服务器(Server)资源, 且实时性差。
思路2在总体水平上增加了Server访问DBMS的开销。
实现:
思路1可以用Session、Page.ViewState等缓存数据。
思路2 的关键是取指定页数据的算法。
下面的Procedure用top实现取指定范围的数据,个人估计效率不高.

CREATE    PROCEDURE Pager  --取制定页的数据 by xhb

@PageSize int,--页面记录数
@PageNumber int,--要取的页序号
@SQL varchar(8000),--查询语句---,
@keyword varchar(8000)--查询语句的主键--结果集的主键
as 
declare @Pos varchar(100)
declare @Len varchar(100)
set @Len=Convert(varchar(100),@PageSize)
set @Pos=Convert(varchar(100),@PageSize*(@PageNumber-1))

exec'select top '+@Len+' * from('+@SQL+') M where M.'+@keyword+' not in (select top '+@Pos+' '+@keyword+' from ('+@SQL+')M)')

commit
GO