有一名为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语句。
此表的纪录数可能很多,需要分页取数据来显示以提高应用程序的性能。
因不能使用存储过程,只能使用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语句。
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太多相同的记录时,分页出错
但对像一般数值类,没什么相同值时
非常有用