微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)

 
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author:        <杨俊明> -- Create date: <2006-11-05> -- Description:    <高效分页存储过程,仅适用于sql2005> -- Notes:        <排序字段强烈建议建索引> -- ============================================= Alter Procedure [dbo].[up_Page2005]   @TableName varchar(50),        --表名  @Fields varchar(5000) = '*',    --字段名(全部字段为*)  @OrderField varchar(5000),        --排序字段(必须!支持多字段)  @sqlWhere varchar(5000) = Null,--条件语句(不用加where)  @pageSize int,                    --每页多少条记录  @pageIndex int = 1 ,            --指定当前为第几页  @TotalPage int output            --返回总页数  as begin     Begin Tran --开始事务     Declare @sql nvarchar(4000);     Declare @totalRecord int;         --计算总记录数               if (@sqlWhere='' or @sqlWhere=NULL)         set @sql = 'select @totalRecord = count(*) from ' + @TableName     else         set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere     EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数                  --计算总页数     select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)     if (@sqlWhere='' or @sqlWhere=NULL)         set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName      else         set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @sqlWhere                       --处理页数超出范围情况     if @PageIndex<=0          Set @pageIndex = 1          if @pageIndex>@TotalPage         Set @pageIndex = @TotalPage      --处理开始点和结束点     Declare @StartRecord int     Declare @EndRecord int          set @StartRecord = (@pageIndex-1)*@PageSize + 1     set @EndRecord = @StartRecord + @pageSize - 1     --继续合成sql语句     set @sql = @sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' +  Convert(varchar(50),@EndRecord)          Exec(@sql)     ---------------------------------------------------     If @@Error <> 0       Begin         RollBack Tran         Return -1       End      Else       Begin         Commit Tran         Return @totalRecord ---返回记录总数       End     end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐