sqlserver2000能实现查询从n条记录到m条记录的功能(类似与MySql的limit的功能)么?

时间:2021-12-31 05:58:20
我只知道可以select top 5 * from table,查出前5条记录
能不能查出第10条到第20条记录呢?
这个在数据量大的时候意义很大
知道MySQL有个功能就是select * from table limit 5,10
就是查询出第5条到第10条记录的
SQLServer能实现么?

18 个解决方案

#1


select top 20 * from table 
minus
select top 9 * from table 

#2


minus 好象在SQL SERVE中不能用

#3


SELECT TOP 10 FROM (SELECT TOP 20 FROM TABLE ORDER BY KEY_ID) ORDER BY KEY_ID DESC.
就可以了。

#4


不好意思,少了个*

SELECT TOP 10 FROM (SELECT TOP 20 * FROM TABLE ORDER BY KEY_ID) ORDER BY KEY_ID DESC.

#5


我现在也在寻求这个问题,但是请问,mysql中这样的语句效率如何?还有
select top 20 * from table 
minus
select top 9 * from table 
这样的语句呢?效率也如何?

#6


除了上述方法,还可用
set rowcount 需处理的行数
select 语句
set rowcount 0//关闭此功能

#7


SELECT TOP 10 * 
  FROM TABLE 
 WHERE EXISTS (SELECT TOP 20 * FROM TABLE ORDER BY KEY_ID) 
 ORDER BY KEY_ID DESC

#8


key_id如果与表的自然顺序不一致怎么办?

#9


hi,nanhill经过了半个小时的试验和测试我已以找出了答案

先说一下为什么前面的解法行不通,minus不行;order by key_id(唯一索引字段)可能打乱表的自然顺序;set rowcount n 只能限制对前n条记录进行操作,也不起多大作用。
你说的第10条到第20条记录我理解为共11条记录,解法如下:

select top 9 * into #temp from table
select top 20-10+1 * from table where key_id 
not in (select key_id from #temp)

为什么括号内不能换成select top 10 key_id from table的原因你试一下就明白了。
因为产生的记录是不一样的。(^-^ 可别忘了给我加分啊!)

#10


谢谢nashan,谢谢大家。
ps:你的名字是“南山”之意么?我的是,我们还有缘嘛:)

#11


to nashan(浪客剑心):
  你的的确可以,但是不能带参数,可惜呀,呵呵
declare @pageno int
set @pageno=9
select top @pageno *
into #Table1
from OWOA_Users
select top 11 *
from OWOA_Users
where UserID not in (select UserID from #Table1)
就会报错。
Incorrect syntax near '@pageno'.

#12


to nanhill,
      你的问题解决了吗?
to netease,
      你的意见提得不错,我再考虑考虑,你有解决方法吗?

#13


to netease,
   哈哈,原来这么简单,看清楚了。这回行了吧!
   declare @pageno int
   set @pageno=9
   SET ROWCOUNT @pageno
   select * into #Table1
           from OWOA_Users
   set ROWCOUNT 0
   select top 11 * from OWOA_Users
          where UserID not in 
                (select UserID from #Table1)

#14


to netease,
   嗨,刚上CSDN没几天,问你一个问题,你的图案为什么和我的不一样?怎么才能改我的颜色和图案呐?

#15


hoho,这个图案是你的生肖图案啊,根据的是你注册的时候填写的生日

#16


我的问题解决了,谢谢哦

#17


to nanhill,
   不用客气,多联系。
   不过那个生肖图案的确是不太像我的那个,算了,不跟它计较。也谢谢你了。

#18


哈哈哈哈,长度可能差不多,宽度就差远了,是吧,哈哈哈哈
多联系,多联系,jiongli@263.net

#1


select top 20 * from table 
minus
select top 9 * from table 

#2


minus 好象在SQL SERVE中不能用

#3


SELECT TOP 10 FROM (SELECT TOP 20 FROM TABLE ORDER BY KEY_ID) ORDER BY KEY_ID DESC.
就可以了。

#4


不好意思,少了个*

SELECT TOP 10 FROM (SELECT TOP 20 * FROM TABLE ORDER BY KEY_ID) ORDER BY KEY_ID DESC.

#5


我现在也在寻求这个问题,但是请问,mysql中这样的语句效率如何?还有
select top 20 * from table 
minus
select top 9 * from table 
这样的语句呢?效率也如何?

#6


除了上述方法,还可用
set rowcount 需处理的行数
select 语句
set rowcount 0//关闭此功能

#7


SELECT TOP 10 * 
  FROM TABLE 
 WHERE EXISTS (SELECT TOP 20 * FROM TABLE ORDER BY KEY_ID) 
 ORDER BY KEY_ID DESC

#8


key_id如果与表的自然顺序不一致怎么办?

#9


hi,nanhill经过了半个小时的试验和测试我已以找出了答案

先说一下为什么前面的解法行不通,minus不行;order by key_id(唯一索引字段)可能打乱表的自然顺序;set rowcount n 只能限制对前n条记录进行操作,也不起多大作用。
你说的第10条到第20条记录我理解为共11条记录,解法如下:

select top 9 * into #temp from table
select top 20-10+1 * from table where key_id 
not in (select key_id from #temp)

为什么括号内不能换成select top 10 key_id from table的原因你试一下就明白了。
因为产生的记录是不一样的。(^-^ 可别忘了给我加分啊!)

#10


谢谢nashan,谢谢大家。
ps:你的名字是“南山”之意么?我的是,我们还有缘嘛:)

#11


to nashan(浪客剑心):
  你的的确可以,但是不能带参数,可惜呀,呵呵
declare @pageno int
set @pageno=9
select top @pageno *
into #Table1
from OWOA_Users
select top 11 *
from OWOA_Users
where UserID not in (select UserID from #Table1)
就会报错。
Incorrect syntax near '@pageno'.

#12


to nanhill,
      你的问题解决了吗?
to netease,
      你的意见提得不错,我再考虑考虑,你有解决方法吗?

#13


to netease,
   哈哈,原来这么简单,看清楚了。这回行了吧!
   declare @pageno int
   set @pageno=9
   SET ROWCOUNT @pageno
   select * into #Table1
           from OWOA_Users
   set ROWCOUNT 0
   select top 11 * from OWOA_Users
          where UserID not in 
                (select UserID from #Table1)

#14


to netease,
   嗨,刚上CSDN没几天,问你一个问题,你的图案为什么和我的不一样?怎么才能改我的颜色和图案呐?

#15


hoho,这个图案是你的生肖图案啊,根据的是你注册的时候填写的生日

#16


我的问题解决了,谢谢哦

#17


to nanhill,
   不用客气,多联系。
   不过那个生肖图案的确是不太像我的那个,算了,不跟它计较。也谢谢你了。

#18


哈哈哈哈,长度可能差不多,宽度就差远了,是吧,哈哈哈哈
多联系,多联系,jiongli@263.net