在Oracle中用rowNumber() 实现的分页我觉得效率非常好,
但我现在就是不知怎样在SqlServer中实现高效率分页。
我看很多程序是先把整个记录集查询出来以后再进行分页,这应该是效率最不好的吧
然后有些人为了提高效率先把PK字段(如:id)查了出来然后再进行分页,当然这个效率应该不错。我想问的是在SqlServer里能不能像Oracle似的光查出从几行到几行,而不用查询整个记录集以后再分页。先谢了!!!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【dinglinhu】截止到2008-06-25 17:03:42的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:20                 
    结贴数:1                  结贴分:20                 
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    SQL Server 2005 的ROW_NUMBER()
      

  3.   

    sqlserver就用游标定位分页,不用把rs全取出来
      

  4.   

    不用啊,用几个带有 TOP 的查询就可以做到了,到网上去搜搜看吧,可以搜到的。
      

  5.   


    我也想过用游标去控制,但没有用过,不知怎么下手。
    高手能否再详细点呢?
    关键是我们单位把网络给掐死了,外网只能上csdn。没法上网查。
    谢谢!!!!!!!
      

  6.   

    select top 5 * from 表 where id not in(select top "+(currentpage-1)*5+" id from 表 order by id desc)order by id desccurrentpage 指的是第几页。5指的是一页的记录数,自己理解吧
      

  7.   

    DECLARE authors_cursor CURSOR FOR 
    SELECT * FROM G_ADMIN OPEN authors_cursor FETCH NEXT
    FROM authors_cursor
      

  8.   


    good too,能后再详细一点啊,如:一页显示5条,查询出第二页。用ibatis 写法也可以。多谢!!!
      

  9.   

    select * from (select ROW_NUMBER() Over(排序) as 记录总数(自定义名称),字段1,字段2,字段(n) from 表名 条件) as 别名 where 别名.记录总数(自定义名称,必需相同) between 开始记录数 and 结束记录数 
      

  10.   


    DECLARE authors_cursor CURSOR FOR 
    SELECT * FROM G_ADMIN OPEN authors_cursor FETCH NEXT 
    FROM authors_cursor
      

  11.   


    这个好像在SqlServer 2000里不能用,因2000没有ROW_NUMBER() 这个隐藏字段。
    还是很感谢!好了,我要结帖了。