随笔- 151 文章- 9 评论- 11

        前两天在网上发现了一条存储过程分页的例子,是利用mssql2005中新添加的函数ROW_NUMBER()来实现的,于是修改了下并且和以前用游标的分页函数进行了以下对比,下面分别将两个存储过程写下来。
        1、使用ROW_NUMBER()的方法来实现:

12个高效存储过程分页及对比
22个高效存储过程分页及对比
32个高效存储过程分页及对比
4

        2、游标方式:
2个高效存储过程分页及对比
2个高效存储过程分页及对比
CREATE procedure p_splitpage
2个高效存储过程分页及对比   
@sql nvarchar(4000),--要执行的sql语句
2个高效存储过程分页及对比
    @page int=1, --要显示的页码
2个高效存储过程分页及对比
    @pageSize int,--每页的大小
2个高效存储过程分页及对比
    @pageCount int=0 out,--总页数
2个高效存储过程分页及对比
    @recordCount int=0 out,--总记录数
2个高效存储过程分页及对比
    @SearchTime int=0 out     --计算耗时
2个高效存储过程分页及对比
as
2个高效存储过程分页及对比   
declare @usetime datetime
2个高效存储过程分页及对比   
set @usetime=getdate()
2个高效存储过程分页及对比   
set nocount on
2个高效存储过程分页及对比   
declare @p1 int
2个高效存储过程分页及对比   
exec sp_cursoropen @p1    
2个高效存储过程分页及对比
2个高效存储过程分页及对比output,
@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output
2个高效存储过程分页及对比   
set @recordCount = @pageCount
2个高效存储过程分页及对比   
select @pagecount=ceiling(1.0*@pagecount/@pagesize)
2个高效存储过程分页及对比            ,
@page=(@page-1)*@pagesize+1
2个高效存储过程分页及对比   
exec sp_cursorfetch @p1,16,@page,@pagesize
2个高效存储过程分页及对比   
exec sp_cursorclose @p1
2个高效存储过程分页及对比   
set  @SearchTime=datediff(ms,@usetime,getdate())
2个高效存储过程分页及对比   
print @SearchTime

        然后分别对15000条的数据进行测试,发现2个存储过程的耗时几乎一样,第一种方法的耗时相对要比第二种稍微快几毫秒,而且不管是查询第几页的数据基本上比较稳定,只是相对的使用起来没有第二种方法方便,但是对于百万条以上的数据的效果如何确没有进行测试,具体哪种方法更好还不得而知,而且哪位朋友如果方便的话可以帮忙修改下相应的不足之处,同时还有一个比较头痛的问题,就是再使用EXEC SP_EXECUTESQL @TPSEL...这个方法的时候,变量@TPSEL不能声明为varchar类型,只能为nvarchar,这个问题具体是因为什么我还没有查到原因!


数据库
分页
0
0
    (请您对文章做出评价)   


posted @ 收藏
2个高效存储过程分页及对比

都不错,我用第二种!
你好啊 我是个菜鸟 能否给个使用实例学习一下最好带个查询条件,不知道能否发到我的邮箱里呀 谢谢啦

相关文章: