还是关于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语句?存储过程?小弟菜鸟,大家多多指教,解决问题就给分。
比方说:从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语句?存储过程?小弟菜鸟,大家多多指教,解决问题就给分。
...全文
相关推荐
SQL Server字符串处理函数大全
SQL Server字符串处理函数大全 select 字段1 from 表1 where 字段1.IndexOf("云")=1; 这条语句不对的原因是indexof()函数不是sql函数,改成sql对应的函数就可以了。 left()是sql函数。 select 字段1 from 表1 where charindex('云',字段1)=1; 字符串函数对二进制数据、字符串和表达式执 行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。
SQL Server 分页查询通用存储过程(只做分页查询用)
段存储过程写得SQL代码很不错,在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用
从数据库中读取指定行数记录
如何用sql返回第三条或者第三条记录开始返回? 从数据库中的表中从第三条记录开始取,那么select该怎么写呢?
sql server2000安装配置与管理认证题
这是一个比较好的题库,学得好的话就顶一下哈。不好,还请多多指教
SQL Server数据库按百分比查询出表中的记录数
主要介绍了SQL Server数据库在一个表中按百分比查询出记录条数的方法及代码示例,需要的朋友可以参考下


疑难问题
