1、使用top
例,检索表a第3行记录
select * from a where id in(select top 3 id from a) and id not in(select top 2 id from a)
即:取top 3,前3条记录,再去除ID等于前2条记录的id
top写法对单一主键的表格,比较方便,多主键表就不太方便,且语句可读性较差。
2、使用带自增ID的临时表
例,检索表a第3行记录
select IDENTITY(int,1,1) as 'rowid',* into #temptab from a
#temptab 效果如图:
检索记录,就很方便了
select * from #temptab where rowid = 3
即第3条记录。代码的可读性要好很多,应用也更灵活。
凡是查询经常涉及第几行的问题,最好表中有个自增列作为序号,如果该序号列叫rownum,那么:
select *
from tableA
where rownum between 31 and 40
如果确实没有序号列和不可能修改表,例如按id列排序,只能:
select top 10 *
from (select top 40 * from tableA order by id) tb
order by id desc
select * from
(select rownum, tableA.* from talbeA
where rownum <= 40)
where rownum > 31