做最好的自己~~

Be My Personal Best!

导航

对查询数据库中第M到N条记录的思考2

 

在<<对查询数据库中第M到N条记录的思考1 >>中我们讨论了如果要查询一张表中第M到第N条记录,条件是那张表中已经存在一个递增连续的字段.但是,很多情况下我们要查询的表中没有这个字段又怎么办呢?
      呵呵,那天晚上找学长商量了一下,还是得到了满意的答案.现在我就与大家一起来讨论一下:
     
      首先我们从最基础的入手:

 use wtqtest
      
go


      
create table ct(
        ss 
varchar(20)
      )
      
go
      
      
--我想这两句我就不用解释了吧!就是建立一张没有自动增长字段的表
      
      
--接下来我们插入20条记录
      
      
insert into ct values('1asdf')
      
insert into ct values('2asdf')
      
insert into ct values('3asdf')
      
insert into ct values('4asdf')
      
insert into ct values('5asdf')
      
insert into ct values('6asdf')
      
insert into ct values('7asdf')
      
insert into ct values('8asdf')
      
insert into ct values('9asdf')
      
insert into ct values('10asdf')
      
insert into ct values('11asdf')
      
insert into ct values('12asdf')
      
insert into ct values('13asdf')
      
insert into ct values('14asdf')
      
insert into ct values('15asdf')
      
insert into ct values('16asdf')
      
insert into ct values('17asdf')
      
insert into ct values('18asdf')
      
insert into ct values('19asdf')
      
insert into ct values('20asdf')
      
     
--接下来进入关键步骤,使用临时变量表
     declare @t table --在内存中建立一个临时变量表,运行结束后自动释放
      (  
        p 
int identity(1,1),
        s 
varchar(20)  --一定要与ct表的那个 [ss] 字段数据类型一致
      )
      
      
--向变量表中放入内容
      insert into @t select * from ct --将ct 表中的内容查询到@t表中
      --下面是做个测试查询,应该有内容才对,但你可以看看你的数据库中并没有这张表
      select * from @t  
      
      
      
--现在就可以在@t表中查询第M到第N条记录了(这个是向表中查询第12条第15条记录)
      select * from
      (
       
select top 4 * from 
        (
select top 15 * from @t order by p ) t
        
order by p desc 
      )   t 
order by p
      
-- 如果是向表中查询第M到第N条记录,则15那个位置代表:N,而4那个位置代表:N-M+1;
      -- 查询出来的结果最终包含第M条记录,也包含第N条记录

      
      
      呵呵,这节就说这么多了,,相信大家也应该知道怎么做了!!!
     

posted on 2008-09-27 20:05  阿万  阅读(883)  评论(0编辑  收藏  举报