T-SQL 分页存储过程

     最近忙于找工作,面试时,遇到面试官要用我用T-SQL语句写一个分页存储过程,当时我一下子就傻了,好长时间没有写了,一时都忘记了,趁着今天有空,花时间写了一下,下面将Code粘贴出来,如有错误之处,望大家指正。

    第一个存储过程相对比较复杂,传入参数较多,涉及到排序。第二个存储过程相对简单点。

    分页存储一:

 1 create Procedure prc_GetRecordForPaging
 2   @tableName varchar(255),--表名
 3   @fieldName varchar(255),--字段名称
 4   @pageSize int=10,       --单页显示大小
 5   @pageIndex int=1,       --页码
 6   @orderType bit=0,       --设置排序类型,非0则是降序
 7   @strCondition varchar(2000)='' --查询条件(注意,不要添加where语句)
 8 as
 9   declare @strSQL varchar(6000) --主执行语句
10   declare @strTemp varchar(1000) --临时执行语句
11   declare @strOrder varchar(500) --排序语句
12   if @orderType != 0 --降序
13      begin
14        set @strTemp='< (select min' 
15        set @strOrder=' order by ['+@fieldName+'] desc' --排序语句
16      end
17   else    -- 升序
18      begin
19        set @strTemp ='> (select Max'
20        set @strOrder =' order by ['+@fieldName+'] asc'
21      end
22   set @strSQL ='select top'+str(@pageSize)+' * from '
23               + @tableName+'] where ['+ @fieldName+ ']'
24               + @strTemp+ '(['+ @fieldName+ ']) from ( select top'+
25               + str(@pageSize*(@pageIndex-1))+'['
26               + @fieldName +'] from ['+ @tableName+']'
27               + @strOrder + ') as tableTemp)'
28               + @strOrder
29 
30   if @strCondition != ''
31      set @strSQL ='select top'+str(@pageSize)+' * from '
32               + @tableName+'] where ['+ @fieldName+ ']'
33               + @strTemp+ '(['+ @fieldName+ ']) from ( select top'+
34               + str(@pageSize*(@pageIndex-1))+'['
35               + @fieldName +'] from ['+ @tableName+'] where '
36               + @strCondition + '' + @strOrder + ') as tableTemp) and'
37               + @strCondition + '' + @strOrder
38   if @pageIndex = 1
39       begin
40         set @strTemp =''
41           if @strCondition !=''
42              set @strTemp =' where ('+ @strCondition + ')'
43           
44           set @strSQL ='select top'+ str(@pageSize)+ ' * from ['
45                       + @tableName+ ']'+ @strTemp+ '' + @strOrder
46       end
47   Execute(@strSQL)
48 Go

分页存储二:

 1 create procedure pro_GetRecordForPaging
 2     @tableName varchar(200),--表名
 3     @pageSize int, --每页显示记录数
 4     @pageIndex int, --当前页码
 5     @colName varchar(30) --排序的字段名
 6 as
 7   begin
 8     declare @strSQL varchar(300)
 9     if @pageIndex = 1
10       set @strSQL ='select top ['+cast(@pageSize as varchar(20)) + ']'
11                    + ' * from ['+ @tableName + ']'
12                    + ' order by ['+ @colName + ']'
13     else
14       set @strSQL='select top ['+cast(@pageSize as varchar(20)) + ']'
15                   + ' * from ['+ @tableName + ']'
16                   + ' where ['+ @colName + ']'
17                   + ' not in ( select top ['
18                   + cast((@pageIndex-1)*pageSize as varchar(20)) + ']'
19                   + @colName + ' from ['+ @tableName + ']'
20                   + 'order by ['+ @colName +'])'
21                   + 'order by ['+ @colName +']'
22     --print
23     Execute(@strSQL)
24   end
25 go

转载于:https://www.cnblogs.com/Peter-Luo/archive/2012/06/01/pro_GetRecordForPaging.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值