以前用ID唯一做分页排序 还好办 select top 20 ...... where id<=(select min(id) from (select ......)) order by id desc  就可以搞定速度也很快。 但现在要先通过另一个字段 best 排序后再ID 排序。 best 字段有两个值0或者1。 
......order by best desc,id desc表 
t1
字段 类型
id int
title nvchar
content ntext
best tinyint

解决方案 »

  1.   

    楼上的方法具体这样实现:SELECT IDENTITY(int, 1,1) AS ID,*
    INTO #Temp
    FROM [YourTalbe]
    order by best desc再对#Temp用原来的方法来分页。
      

  2.   

    三个办法,如果要减少网络负载,那么用临时表+id的方法。但是对tempdb压力比较大。如果不考虑网络负载,可以在ado那边截取。最后就是升级到sqlserver2005
      

  3.   

    楼上说的sql2005 这个我还没怎么看过能简单介绍一下么。 或者提几个对象的关键字 我也好搜索一下相关资料。谢谢。
      

  4.   

    http://www.google.com/search?hl=zh-CN&q=sql2005+%E5%88%86%E9%A1%B5&btnG=Google+%E6%90%9C%E7%B4%A2&lr=
      

  5.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
    一方面,他们会为您的问题提供满意的答案,
    另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
    中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=14&pointid2=1&pointid3=5非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  6.   

    比如..一页显示20条记录..取第二页时...取出 TOP 40 
    然后 把取出结果...倒过来排序..再取TOP 20  再倒回来排序..要考虑到..有可能记录没达到2页..我已经实现过了..很不错..就是SQL语句写的复杂了点..
      

  7.   

    如果没有唯一列,做两次top分页会有问题了
    加入你做sort的那列的值只有很少几个(你可以把那列的值设成同样的来试验),分页后会发现有几页的内容是一样的。
      

  8.   

    的确如 luoqun_ncs(暂时冰封) 说。 这种应用 使用TOP没有唯一性没法排。http://www.bestdba.cn/match_discussion3.aspx?pointid=14&pointid2=1&pointid3=5这个推荐大家看看。里面介绍的方法不错。里面的邹建的几个办法都不错。那个两个top嵌套的办法也就是liminlovemama(大森林) 说的这种 如果只计算id和best 应该是比较快的。 是写成这样对吧:
    select * from t1 where id in(select top 20 id from (select top 400 id,best from t1 where ..... order by best desc,id desc) a order by best asc,id asc)