1 Create PROCEDURE [dbo].[GetRecordWithPage] 2 @fieldsType nvarchar(1000), --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50) 3 @fieldsList nvarchar(500), --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle 4 @selectSrting nvarchar(2000), --向@t表变量中读取记录的Select语句 5 @resultOrderBy nvarchar(200), --对分页结果进行排序的字段,如:升序‘PhotoID ASC‘、降序‘PhotoID DESC‘,注意:如果是降序的话要在selectSrting和此处都加DESC 6 @pageSize INT, --页尺寸,0表示返回所有行 7 @currentPage INT, --当前页,首页为1 8 @RecordCount INT OUTPUT --非0值则返回记录总数 9 AS 10 BEGIN 11 DECLARE @strSql varchar(4000) 12 declare @sql nvarchar(1000) 13 SET @strSql = ‘DECLARE @t TABLE(‘ +@fieldsType+ ‘);‘ 14 SET @strSql = @strSql + ‘INSERT INTO @t ‘+@selectSrting+ ‘;‘ 15 set @sql = @strSql + ‘select @aa=count(*) from @t;‘ 16 exec sp_executesql @sql,N‘@aa int output‘,@RecordCount OUTPUT; 17 IF @pageSize=0 18 SET @strSql=@strSql+‘SELECT ‘+@fieldsList+‘ FROM @t;‘ 19 ELSE 20 IF @currentPage=1 21 SET @strSql=@strSql+‘select TOP(‘+STR(@pageSize)+‘)‘+@fieldsList+‘ FROM @t;‘ 22 ELSE 23 BEGIN 24 SET @strSql =@strSql+‘SELECT TOP(‘+Str(@pageSize)+‘)‘+ @fieldsList+‘FROM (SELECT TOP(‘+Str(@pageSize * @currentPage)+‘)‘+@fieldsList+‘ , ROW_NUMBER() OVER (ORDER BY ‘+@resultOrderBy+‘)‘ 25 SET @strSql =@strSql+‘ AS RowNumber FROM @t‘ 26 SET @strSql =@strSql+‘) AS r WHERE r.RowNumber >‘ + Str(@pageSize * (@currentPage - 1))+‘;‘ 27 END 28 EXEC(@strSql) 29 END
挺好的一个分页存储过程
原文:http://www.cnblogs.com/8769450555IT/p/3595738.html