怎么用SQL语句实现,从数据库中提取符合指定条件的前n条记录?
用SQL语句,指定一定的条件,从数据库中提数据。如果数据量很大的话,会花很多时间。
所以,我想分页显示。一次只取n条记录,显示在页面上。翻页时,再取下n条记录……。
这样,所花的时间,就会被分解。不会感觉时间延迟。
可该怎么实现呢?
问题点数:100、回复次数:4Top
1 楼phoenixxu()回复于 2001-12-01 21:47:36 得分 50
select top 10 *
from ...
Top
2 楼ttoomm(桥风)回复于 2001-12-01 21:58:03 得分 0
如果,想取出第10条到第20条的记录呢?Top
3 楼Haiwer(海阔天空)回复于 2001-12-01 22:07:17 得分 0
http://www.csdn.net/expert/Topic/266/266094.shtmTop
4 楼seafo(海之牙)回复于 2001-12-01 22:22:58 得分 50
我在前面已经发过类似问题的回复这里再copy一遍
1、可以用游标实现
declare @beginId int
declare @endId int
declare @sql varchar(255)
DECLARE cursor1 CURSOR FOR SELECT id FROM [table1] order by id
open cursor1
FETCH ABSOLUTE 1000 FROM cursor1 into @beginId
FETCH relative 1000 FROM cursor1 into @endId
set @sql='select * from [table1] where id between '+@beginId+' and '+@endId
exec(@sql)
可以取出1000-2000的记录
坏处是只能按id排序
2、用临时表
(设table1有id,部门,两个字段,id是唯一值)
select top 2000 * into #temp from [table1] order by 部门 desc,id desc
select top 1000 * from #temp order by 部门 asc,id asc
这样可以按部门排序并实现翻页效果,加上id是保证在部门大量重复的情况下仍能得出正确结果,显示的时候再按照(部门 desc,id desc)的顺序显示,缺点是到后面效率低,没有游标的效率高
修正一下:上面所说的第二个方法也可以这样实现
(设table1有id,姓名,部门,三个字段,id是唯一值)
create table #temp
(id int IDENTITY(1,1),
部门 varchar(10),
姓名 varchar(20)
)
insert into #temp select 部门,姓名 from [table1] order by 部门 desc
select * from #temp where id>1000 and id<2001
可实现按部门排序的翻页且效率高,不过#temp的id一定要是IDENTITY,且insert into的时候table1.id不能选
不知道 between 和 where id>1000 and id<2001哪个效率高,你可以实验一下
Top




