还是关于SQL Server取指定记录的问题。

play7788 2007-01-17 11:31:30
目的:从表中第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语句?存储过程?小弟菜鸟,大家多多指教,解决问题就给分。
...全文
307 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfdsoft 2007-01-17
  • 打赏
  • 举报
回复
补充一下,这种解法很没效率。。
hfdsoft 2007-01-17
  • 打赏
  • 举报
回复
根据ID是不行D,万一你中间删了一条记录了呢?那ID=100的地方不就是第99条啦。。

sql="select * from table"
rs.open......................
i=0
Do while not rs.eof
i=i+1
if i>100 and i<=110 then
varStr=rs("XXX")
end if
rs.movenext
Loop
pzhuyy 2007-01-17
  • 打赏
  • 举报
回复
根据原来的表建立一个临时表,存储数据,给定编号,以后查询时只需要根据指定的查找就OK了!
pzhuyy 2007-01-17
  • 打赏
  • 举报
回复
参照sql的分页存储过程
指定每页大小,指定当前页,得到记录:)
play7788 2007-01-17
  • 打赏
  • 举报
回复
小虫的表达式执行效率确实比较高,如果没其它答案我就给他分了。
play7788 2007-01-17
  • 打赏
  • 举报
回复
to hfdsoft
你这种遍历数据集的方法肯定不可取,是效率最低的。

to chenguang79(小虫)
你的方法和我的大同小异,但是我的数据库非常大,记录在几百万条,所以n的值就很大,你的语句执行时如果是select top 1000000 id from table,这本身就相当慢了。

to cow8063
我也想全部取出,在数据集里当然好处理,但是本身select top 1000000 .......就会很慢。
play7788 2007-01-17
  • 打赏
  • 举报
回复
to hfdsoft
你这种遍历数据集的方法肯定不可取,是效率最低的。

to chenguang79(小虫)
你的方法和我的大同小异,但是我的数据库非常大,记录在几百万条,所以n的值就很大,你的语句执行时如果是select top 1000000 id from table,这本身就相当慢了。

to cow8063
我也想全部取出,在数据集里当然好处理,但是本身select top 1000000 .......就会很慢。
cow8063 2007-01-17
  • 打赏
  • 举报
回复
可以全部取出,然后之前和之后的记录不作处理
chenguang79 2007-01-17
  • 打赏
  • 举报
回复
n = 100 '它是从第几条取
m = 100   '它是取多少条

select top m * from talbe where id not in(select top n id from table)
cpp2017 2007-01-17
  • 打赏
  • 举报
回复
没有什么比较后的方法。效率都不高,在网上搜索一下分页的存储过程参考一下。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧