通过游标实现分页存储过程

       之前看到过网上有通用的分页存储过程,本人也用过,性能还可以,但是如果数据要是有几百万条呢?速度是不是就快了呢?本人考虑了些天,觉得如果在存储过程里再使用游标,速度应该更快的,于是就自己弄了个带游标的分页存储过程。供爱好编程的兄弟们参考参考。代码如下:

Create proc [dbo].[XP_Select]



	@PgIdx int,



	@PgSize int,



	@NUserID varchar(20)



as 



begin



--定义结果集表变量



DECLARE @t TABLE(userID varchar(10),RegName varchar(100),AddRess varchar(100))







--定义游标并进行合并处理



DECLARE MyCURSOR CURSOR  



FOR



SELECT 



	UserID,RegName,AddRess 



from



	xpuser



where 



	UserID like '%'+@NUserID+'%'



--	UserID = '200197'



	







DECLARE @userID varchar(10),@userName varchar(100),@AddRess varchar(100)



--打开游标







OPEN MyCURSOR



FETCH MyCURSOR INTO @userID,@userName,@AddRess



WHILE @@FETCH_STATUS=0    --游标存在数据时循环



BEGIN



	INSERT @t VALUES(@userID,@userName,@AddRess)



    FETCH MyCURSOR INTO @userID,@userName,@AddRess



END



CLOSE MyCURSOR



DEALLOCATE MyCURSOR



--显示结果



declare @begin int



declare @end int



set @begin = (@PgIdx -1)*@PgSize + 1



set @end=(@PgIdx * @PgSize)







select * from (select ROW_NUMBER() over (order by userID desc) as ROW,UserID,RegName,AddRess from @t) as sp



where ROW between @begin and @end



--SELECT * FROM @t



end

  其中ROW_NUMBER()函数是SQL2005自带的函数,这个存储过程首先是通过游标组条读取数据,并把数据添加到自定义的表中,然后对自定义的表进行分页查询。
本人觉得用这种方法查询起来速度应该更快些!如果那位知道有更好的方法发邮件至ruolinzhanyuan@yahoo.com.cn与本人探讨探讨
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值