利用SQL SERVER实现分页读取数据

Posted on 2008-02-20 17:11  Ticky  阅读(917)  评论(0)    收藏  举报
        现在的网站都习惯分页读取数据,除了显示更简洁,还有就是一次读取的数据不会太多,从而减轻资源使用的效率性.

        比起其它外层调用,无疑存储过程读取数据具有更高效率.以下是一般的分页读取数据过程:

 

CREATE PROCEDURE GetListByPage
 @PageSize     int = 5,           -- 页容量,即每页显示的数据条数
 @PageNum    int = 1,            -- 页码
 @IsCount    int = 0,            -- 查询记录总数, 非 0 值则返回
 @IsDesc    int = 0,            -- 排序, 0为升序,非0则降序
 @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
AS
 DECLARE @strOrder VARCHAR(1000)             --排序语句
 DECLARE @strTemp VARCHAR(1000)              --临时字符串变量
 DECLARE @strSelect VARCHAR(3000)            --选择的数据项
 DECLARE @strSql VARCHAR(6000)      --查询语句

 --防止查询条件为空
 IF @strWhere IS NULL
  SET @strWhere=''

 --重新编写查询条件
 IF @strWhere =''
  SET @strWhere='1=1'

 --生成数据排序语句
 IF @IsDesc = 0
 BEGIN
  SET @strTemp = ' NOT IN(SELECT TOP '+ str((@PageNum-1)*@PageSize)
  SET @strOrder = ' order by [QueryColumn] desc'
 END
 ELSE
 BEGIN
  SET @strTemp = ' NOT IN(SELECT TOP'+ str((@PageNum-1)*@PageSize)
  SET @strOrder = ' order by [QueryColumn] asc'
 END

 --生成查询的数据列,如全部,可直接写为*
 SET @strSelect=' yourSelectColumns '

 --编写查询语句
 --如不为查询记录总数,则生成查询数据语句
 IF @IsCount=0
  SET @strSql='SELECT TOP '+str(@PageSize)+' '+@strSelect+' FROM QueryTable WHERE '+@strWhere+' and [QueryColumn] '+@strTemp+' [QueryColumn] FROM QueryTable WHERE '+@strWhere+' '+@strOrder+') '+@strOrder
 --如为查询记录总数,则生成查询总数语句 
 ELSE
  SET @strSql='SELECT COUNT(*) FROM QueryTable WHERE '+@strWhere

 --执行查询语句
 EXEC(@strSql)


GO

其中,QueryColumn为数据表可以作为标识的数据,QueryTable为数据表名,yourSelectColumns为你查询的数据项

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3