一个高效率的分页存储过程

  create proc [dbo].[up_pager]


--*********过程要完成的功能
         @table varchar(200)='student', --表名
@pageSize int=10,  --页码大小
@pageNum int=2,  --当前第几页
@primaryKey varchar(100)='stuid', --主键
@field varchar(1000)='*',  --字段stuname,sex,birthday
         @count int output ,--数据总数
@pageCount int output --页数
as


--set @table='student'
--set @pageSize=10
--set @pageNum=2
--set @primaryKey='stuid'
--set @field='*'
declare @sql nvarchar(2000)
set @sql='select @c=count(1) from '+@table
exec sp_executesql @sql,
N'@c int output',
@count output
--create proc u_demoo
--@c int 
--as
--select @c=count(1) from student
--go
--一共有多少页
set @pagecount=@count/@pageSize
if(@count%@pageSize!=0)
begin
set @pagecount=@pagecount+1
end
--5 要显示的页码超过最后一页显示最后一页
if(@pageNum>@pageCount)
begin
set @pageNum=@pagecount
end
--要显示的页友小于了第页,应该显示第一页
if(@pageNum<1)
begin
set @pageNum=1
end
--******************拼接分页的sql语句
set @sql='select top '+convert(varchar, @pagesize)
+' '+@field+' from '
+@table+' where '+@primaryKey
+' not in ('
+'select top '+convert(varchar,(@pageNum-1)*@pagesize)
+' '+@primaryKey+' from '+@table
+')'


print @sql --打印
--提示消息
declare @msg varchar(1000)
set @msg='当前:'+convert(varchar,@pagenum)+'页,共'+convert(varchar,@pagecount)
+'页,总记录数:'+convert(varchar,@count)+'条'
--执行
exec(@sql)
print @msg


--******************调用f
declare @count int,@pagecount int
exec up_pager 'student',10,2,'stuid','*',@count output,@pagecount output
print @count
print @pagecount
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值