码迷,mamicode.com
首页 > 其他好文 > 详细

简单分页存储过程

时间:2015-06-28 17:03:14      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:

 1 create proc proc_page(
 2 @tableName varchar(50),--要进行分页的表名
 3 @columnFilds varchar(500),--要查询的列,默认是*,查询所有的列
 4 @whereStr varchar(500),--查询条件,不带where 关键字
 5 @pKcol varchar(50),--主键列
 6 @sortType int,--排序类型,0顺序,1倒叙
 7 @pageSize int ,--每页的显示数量,即分页大小
 8 @pageNow int, --当前页码
 9 @countRecord int output,--表的总记录数
10 @pageCount int output--总页数,总页数 = 总记录数
11 )
12 as
13     declare @sqlCount nvarchar(500) --获取总记录数、总页数的sql语句
14     declare @sqlstr varchar(8000)--获取分页信息的SQL语句
15     declare @sortstr varchar(50)--排序语句,如‘ order by id asc‘
16 begin
17     if (@sortType=0) set @sortstr = ‘ order by ‘+ @pKcol +‘ asc ‘ --如果排序类型等于0就代表是升序
18     if (@sortType=1) set @sortstr = ‘ order by ‘+ @pKcol +‘ desc ‘--否则就是降序
19     
20     begin
21     
22      set @sqlCount=‘select @countRecord=count([‘+@pKcol+‘]),@pageCount= CEILING(count(‘+@pKcol+‘)*1.0/‘+cast(@pageSize as varchar(10))+‘)from ‘+@tableName+@whereStr
23      print @sqlCount
24      exec SP_EXECUTESQL @sqlCount,N‘@countRecord int output,@pageCount int output‘,@countRecord output,@pageCount output
25      --这里面的关键点是执行时用到的SP_EXECUTESQL函数
26     end
27     
28     begin
29         set nocount on
30         if(@pageNow<2)--查询第1页
31             set @sqlstr=‘select top ‘+cast(@pageSize as varchar(10))+‘ ‘+@columnFilds+‘ from ‘+ @tableName +@whereStr+@sortstr
32         else--查询第2页以后的其他页
33            begin
34             set @sqlstr=‘select top ‘+cast(@pageSize as varchar(10))+‘ ‘+@columnFilds+‘ from ‘+ @tableName +‘ where ‘+@pKcol+‘ > (
35              select max(‘+@pKcol+‘) from (select top ‘+cast(@pageSize*(@pageNow-1) as varchar(10))+‘ ‘+@pKcol+‘ from ‘+@tableName+@sortstr+‘ ) as temptable
36             )‘+@sortstr
37            end
38         set nocount off
39         print @sqlstr--打印出当前的sql
40         exec (@sqlstr)--执行sql
41     end
42     
43 end
44 
45 --调用存储过程
46 declare @countRecord int,@pageCount int
47 exec proc_page ‘teststudents_1‘,‘*‘,‘ ‘,‘id‘,0,10,5,@countRecord output,@pageCount output
48 select @countRecord,@pageCount
49 
50 --删除存储过程
51 --drop proc proc_page

 技术分享

简单分页存储过程

标签:

原文地址:http://www.cnblogs.com/programsky/p/4605686.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!