还是关于SQL Server取指定记录的问题。
目的:从表中第n条记录开始取,取m条记录。
比方说:从table表里取第100条记录以后的记录,取10条。
这个问题困扰了很久,看了很多人的贴都不能根本解决问题。能解决问题的效率又太低。
方法一:如果表中有字段id表示记录的行数,那么可以很简单的写成
select top 10 * from table where id>100
问题一:如果我的表中没有这样一个记录行数的id字段呢?往下看
假设一:如果表中有字段id,但是id的值并不能表示记录的行数,也不是等差数列,但是是一个递增的数列,假设如下图:
记录行数 id
1 1
2 8
3 10
4 13
5 100
6 135
那么有方法二可以解决这个问题:
select top 10 * from table where id >= (select top 1 id from (select top 100 id from table order by id asc) tmp order by id desc)
问题二:以上语句还是得利用表中的id字段。虽然以上select语句能得到第从100行起的10条记录,但是执行效率低select top 100 id from table显然非常耗资源,如果是从第100万条开始取select top 1000000 id from table,是相当慢的。
求解:有没有办法可以不利用表中的id字段的值,或者说有执行效率比较高的写法。或者利用高级的SQL语句?存储过程?小弟菜鸟,大家多多指教,解决问题就给分。