首页 > 其他 > 详细

分页存储过程

时间:2014-03-12 16:01:15      阅读:478      评论:0      收藏:0      [点我收藏+]

 

bubuko.com,布布扣
 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
View Code

挺好的一个分页存储过程

分页存储过程,布布扣,bubuko.com

分页存储过程

原文:http://www.cnblogs.com/8769450555IT/p/3595738.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!