ASE 15.0 仅支持使用TOP
来限定记录的条数,功能与MySQL的LIMIT
类似。
示例
从雇员表(emp)中取出雇员号排在前5的五名雇员记录:
select top 5 empno, ename
from emp order by empno
如果要查询雇员号排在第6到第10之间的五名雇员记录
尝试查询方法1:
select top 5 empno, ename
from (select top 10 empno, ename
from emp
order by empno desc)
order by empno
使用该方法1会报告如下错误:
在派生表中不允许使用一条OREDER BY子句。
ASE在这里并不支持在派生表中使用OREDER BY
子句,一种可替代的方法是借助于临时表:
- 将记录排序放于临时表,并生成一个主键。
- 从临时表里取
id
为6到10的5条记录。
1> select top 10 empno, ename, id=identity(10)
into #tmp_tb
from emp
order by empno
2> go
1> select empno, ename
from #tmp_tb
where id between 6 and 10
2> go
在生成临时表的过程中加入TOP 10
的限定,是为了减少生成记录的条数,提高临时表的生成效率。
这也是用于ASE数据库记录分页的一个基本方法。