select ROW_NUMBER() over(order by qty,empid) as rownum,
empid,mgrid,qty
into #SalesRN
from dbo.sales;
create unique clustered index idx_rn on #salesrn(rownum);
declare @pagesize as int,@pagenum as int;
set @pagesize=5;
set @pagenum=2;
select rownum,empid,mgrid,qty
from #salesRN
where rownum between @pagesize*(@pagenum-1)+1
and
@pagesize*@pagenum
order by rownum;
drop table #salesrn;
优点:高效 思路是把数据插入一个临时表中,并为临时表创建一个聚集索引,保证每次只seek所需的数据。
通用:sqlserver 2005及以后的版本,无论数据库的主键是什么类型的(identity &&guid),都可以通过row_number()
进行处理
经测试后此方法性能上仍然欠缺,我将在提供一个思路。