查询数据库中的第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 
      )   t2 
order by p
      
-- 如果是向表中查询第M到第N条记录,则15那个位置代表:N,而4那个位置代表:N-M+1;
      -- 查询出来的结果最终包含第M条记录,也包含第N条记录
1> 先按临时id取出1到N条记录,如:(select top 15 * from @t order by p ) ;
2>接着去掉M条记录之前的所以数据,剩下就是M-N条记录了,如:select top 4 * from t order by p desc ;
3>取出M-N条记录,OK! select * from t2

转自:http://www.cnblogs.com/leeyan/articles/1395377.html

原文地址:https://www.cnblogs.com/kelin1314/p/1606516.html