有一名为Table的表,字段有自增型的ID和其他的字段。
此表的纪录数可能很多,需要分页取数据来显示以提高应用程序的性能。
因不能使用存储过程,只能使用SQL语句。
在网上找到一个做法:
--------------------------------------------------------------
select Top 每页记录数 * from (
                              select Top 每页记录数 * from
                                (
                                  select Top 每页记录数*当前页码 * from Table order by ID desc
                                )t1 
                              order by ID asc
                              )t2 order by ID desc 
---------------------------------------------------------------不过该做法的缺点有两个:一是如果总的记录数很大,越到后面的页码,效率就越低。
                    二是到了最后一页,仍然显示设定的每页记录数的记录,这是不对的,比如总记录数有16条,每页记录数为5条,到了最后一页,不是显示5条,应该是1条而已。请问高手,还有别的比这更好的做法吗?要求是不能使用存储过程,只用SQL语句。

解决方案 »

  1.   

    SELECT TOP 10 *
    FROM TestTable
    WHERE (ID >
    (SELECT MAX(id)
    FROM (SELECT TOP 20 id
    FROM TestTable
    ORDER BY id) AS T))
    ORDER BY IDSELECT TOP 页大小 *
    FROM TestTable
    WHERE (ID >
    (SELECT MAX(id)
    FROM (SELECT TOP 页大小*页数 id
    FROM 表
    ORDER BY id) AS T))
    ORDER BY ID这种方式也有问题
    对于ID为空或者ID太多相同的记录时,分页出错
    但对像一般数值类,没什么相同值时
    非常有用