首页 > 代码库 > 存储过程分页语句

存储过程分页语句

create proc [dbo].[ceb_Pagination]@strFields nvarchar(2000),  --字段名@strTableName nvarchar(2000), --表名@strWhere nvarchar(4000),  --条件 无需加where@strOrderBy nvarchar(200), --排序 必添 无需加order by@PageSize int,    --分页大小@CurrentPage int,   --当前页,1为起始页@PageCount int output,  --返回总页数@RecordCount int output  --返回记录总数asbegindeclare @StartIndex int     --定义起始位置set @StartIndex = (@currentPage - 1) * @PageSize + 1declare @strSql1 nvarchar (Max) --数据查询declare @strSql2 nvarchar (Max) --统计记录总数declare @ParmDefinition nvarchar (Max)set @ParmDefinition = N@tmp int outputset @strSql1 = Nselect row_number() over (order by  + @strOrderBy +  ) as RowID, set @strSql2 = select @tmp = count(*) if @strFields <> ‘‘ set @strSql1 = @strSql1 + @strFieldselse set @strSql1 = @strSql1 +  * if @strTableName <> ‘‘begin set @strSql1 = @strSql1 +  from  + @strTableName set @strSql2 = @strSql2 +  from  + @strTableNameendif @strWhere <> ‘‘begin set @strSql1 = @strSql1 +  where  + @strWhere set @strSql2 = @strSql2 +  where  + @strWhereendexec sp_executesql @strSql2,@ParmDefinition,@tmp = @RecordCount output  --执行统计记录总数SQL语句if @RecordCount % @PageSize = 0  --计算总页数 set @PageCount = @RecordCount / @PageSizeelse set @PageCount = @RecordCount / @PageSize + 1set @strSql1 = with TempTable as (  + @strSql1 +  ) select * from TempTable where RowID between    + Convert(varchar(10),@StartIndex) +  and  + Convert(varchar(10),@StartIndex + @PageSize - 1)SET @strSql1 =@strSql1 + order by RowIDexec(@strSql1)