Sql Server 2005自定义分页

在sql  server  2000中,要实现显示某一页,就返回那一页数据的效果的方法实在不尽人意.网上很多通用的分页存储过程,但看着就头大.如果使用我前面提到的使用in,not  in,top来进行返回特定页,特殊的限制又会比较多(比如ID要递增).现在Sql  Server  2005中提供了一个函数ROW_NUMBER(),可以使自定义分页变得简单许多.
我们先来看看ROW_NUMBER()是干什么的.执行下面这段SQL语句:
SELECT  [ReportID],[UserName],  [ReportID],
[TimeStart],  [TimeEnd],ROW_NUMBER()  OVER  (ORDER  BY  ReportID)  AS  RowNo
FROM  [ExecutionLog]
执行结果如下图所示:

很简单,ROW_NUMBER()  就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER  BY  ReportID).现在,你看到了自定义分页的影子了吗?:)下面,我们看看怎么具体应用这个RowNo进行分页.

现在,假设我每一页的数据是10条,我们就可以使用如下所示的SQL语句返回指定页的数据:
@”
SELECT  TOP  10  *
FROM
(
SELECT  top  10  [InstanceName],  [UserName],  [ReportID],
[TimeStart],  [TimeEnd],ROW_NUMBER()  OVER  (ORDER  BY  ReportID)  AS  RowNo
FROM  [ExecutionLog]
)  AS  A
WHERE  RowNo  >  ”  +  pageIndex*10
pageIndex就是我们需要数据的页数.很简单,不是吗?并且,这种方式几乎没有什么限制,因为他相当于对于任何检索,都生成了一个新的排序列.我们就可以使用该列进行自定义分页.

No Comments, Be The First!

Your email address will not be published.