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

play7788 play7788 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
目的:从表中第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语句?存储过程?小弟菜鸟,大家多多指教,解决问题就给分。
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
play7788
疑难问题 22,298 成员 121,727 内容