简单的分页存储过程

CREATE PROCEDURE dbo.EligibleYouthDataPagination
@TableName varchar(50),
@ID varchar(50),
@PageSize int ,
@PageNum int,
@TotalPageNumber int output,
@MiddlePageNumber int output
 AS
declare @recordCount int
declare @totalPageNum int
declare @middlePageNum int
declare @LastPageRecordNum int
declare @ydata int
declare @strSQL varchar(100)
declare @strPageSize varchar(50)
declare @strRowsNum varchar(50)
set @strPageSize=cast(@PageSize as varchar(50))
exec dbo.EligibleYouthRecordCount  @recordCount out
select @middlePageNum=(@recordCount/@PageSize)/2+1
select @MiddlePageNumber=@middlePageNum
select @ydata=@recordCount%@PageSize
if  @ydata=0 
begin
select @LastPageRecordNum=@PageSize
select  @totalPageNum=@recordCount/@PageSize
end
else
begin
select @LastPageRecordNum=@ydata
select @totalPageNum=@recordCount/@PageSize+1
end
select @TotalPageNumber=@totalPageNum
if @PageNum>@middlePageNum and  @PageNum<@totalPageNum
begin
select  @strRowsNum=cast((@PageSize*(@totalPageNum-@PageNum-1)+@LastPageRecordNum) as varchar(50))
exec(' select   *  '+
                           ' from  ( select top '+@strPageSize +'  *  '+
                                        ' from '+@TableName +
                                        '  where  ' + @ID+'  <(select min('+@ID+')'+
                                                                        ' from ( select top '+ @strRowsNum+ '  ' +@ID+
                                                                               '  from '+@TableName+
                                                                               ' order by ' +@ID+'  desc )' +' as t)'+
                                           ' order by '+@ID +' desc '+
                                          ') as T'
                            +' order by '+@ID +'  asc')
exec (@strSQL);                                                                                            
end
if  @PageNum>=@totalPageNum
begin
declare @strLastPageRecordNum varchar(50)
select @strLastPageRecordNum=cast(@LastPageRecordNum as varchar(50))
select @strSQL='select * '+
                          ' from (select top '+@strLastPageRecordNum+'  * '+
                                     ' from '+ @TableName+
                                    ' order by '+@ID +' desc) as t '
                            +' order by '+@ID
exec(@strSQL)
end

if @PageNum<=@middlePageNum  and @PageNum<>1
begin
select @strRowsNum=cast(@PageSize*(@PageNum-1) as varchar(50))
exec('select top '+@strPageSize+' * from '+@TableName +
          ' where '+@ID+'>(select max( '+@ID+' )'+
                                     'from(select top  '+@strRowsNum+'  '+@ID+
                                             ' from '+@TableName +
                                             ' ORDER BY ' +@ID +') AS  '+@TableName+' )'+
          '  ORDER BY '+@ID)
end
if @PageNum<=1
begin
exec('select top '+@strPageSize+' * from '+@TableName +' order by '+@ID );
end
GO

你可能感兴趣的:(存储过程)