最近在使用sqlserver2005的数据库编码,查到有一个row_number(order by 【字段】)的函数,通过该函数进行分页非常的方便,请大家看看我写的分页存储过程。
--分页存储过程
create procedure [dbo].[proc_TestPage]
--表名
@tablename nvarchar(255),
--排序字段
@sortcolumn  nvarchar(255),
--每页记录数
@pagecount  int,
--页号
@pageindex  int
as
declare @beginrow int
declare @endrow intset @beginrow=0
set @endrow=0set @beginrow=(@pageindex-1)*@pagecount+1
set @endrow=@pageindex*@pagecountdeclare @sqlstr nvarchar(4000)set @sqlstr='with table1 as(select *,ROW_NUMBER() OVER(ORDER BY '+ @sortcolumn+' ) AS ROW'+
            ' FROM '+@tablename+') '
set @sqlstr=@sqlstr +' SELECT * FROM TABLE1 WHERE ROW BETWEEN '+cast(@beginrow as nvarchar )+' and '+cast(@endrow as nvarchar)exec(@sqlstr)

解决方案 »

  1.   

    使用是方便,但是性能不是最好的。
    还是top好。
      

  2.   

    大家测试过,这个存储过程和Top之间的差距吗
      

  3.   

    top max 分页,性能比rownumber略好,但缺点是 如果用标识作为排序字段的话,可能出现数据不连续的情况。
    top not in 这个性能最差,不推荐,因为每次都要读取二次表。 
    rownumber 分页,性能也很强,是SQLSERVER2005新增的方式,优点是使用记录行数来作为排序字段,记录连续很强大,可扩展性能也强。
      

  4.   

    也参考一下Scott Mitchel的Data Access Tutorials里提出的分页方法吧。
    配合ObjectDataSource分页很方便。
      

  5.   

    顶!貌似很好
    但有点不太明白 为什么EXEC后面不接存储过程的名称 而是一个变量名
      

  6.   

    LZ现在才知道啊?你out 了!呵呵
      

  7.   

    我是简要的测试了下这个分页存储过程的,的确没有网上流传的千万级的存储过程(TOP方式)好。
    不知道大家测试如何
      

  8.   

    假设是1千万 取最中间10ge那么是500万的 ROWNUMBER 定序快还是 
    TOP 500万的TOP临时快
    非专业猜测  欢迎拍砖
      

  9.   

    http://topic.csdn.net/u/20100617/04/80d1bd99-2e1c-4083-ad87-72bf706cb536.html
    LZ看看这个