适用于2005以上版本
create procedure [dbo].[SP_GetPageList] ( @columns nvarchar(max), --查询字段 @tablename nvarchar(max), --表名视图 @orderby nvarchar(max), --排序字段 @swhere nvarchar(max), --查询条件 @pagesize int, --每页条数 @pageindex int, --页的索引 @rowCount int output --总记录数 ) as --获取总记录数 declare @sqlcount Nvarchar(max) set @sqlcount=N'select @rowCount=count(*) from '+@tablename+' '+@swhere exec sp_executesql @sqlcount, N'@rowCount int out', @rowCount out --计算页数 declare @pagecout int if @rowCount%@pagesize>0 set @pagecout=(@rowCount/@pagesize)+1 else set @pagecout=(@rowCount/@pagesize) --计算起始索引 declare @begin nvarchar(30) declare @end nvarchar(30) if @pageindex<1 set @pageindex=1 if @pageindex>@pagecout set @pageindex=@pagecout set @begin=convert(nvarchar(30), (@pagesize*(@pageindex-1))+1) set @end=CONVERT(nvarchar(30), @pagesize*@pageindex) --查询结果 declare @sqlre nvarchar(max) declare @top int set @top=@pageindex*@pagesize set @sqlre=N'select top '+Cast(@top as varchar)+' ROW_NUMBER() over('+@orderby+') as rownum, '+@columns+' from '+@tablename+' '+@swhere exec('select '+@columns+' from ('+@sqlre+') a where a.rownum between '+@begin+' and '+@end+' '+@orderby)