码迷,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
迷上了代码!