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