头一低,很多年都这样过去了...

欢迎来到Kittow的部落格! - http://blog.skyhe.com

Agile Web Development (敏捷Web开发)

Want to Know Something More? Move Your Mouse Here;)

我是天空的一片云,偶尔投影在你的波心,你记得也好,最好你忘掉,你我在交汇时,互放的光亮。
——徐志摩《偶然》 More...

我的VOA听写积分

2006-2-11 [返回]
Sql Server 2005自定义分页
    前面一篇随笔,我提到了Sql Server 2000的自定义分页,但是在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就是我们需要数据的页数.很简单,不是吗?并且,这种方式几乎没有什么限制,因为他相当于对于任何检索,都生成了一个新的排序列.我们就可以使用该列进行自定义分页.

http://www.agilelabs.cn/blogs/woody/archive/2005/11/26/218.aspx
转自:天河网 | www.skyhe.com

Posted at 11:43 AM | Comments[0]

转自:天河网 | www.skyhe.com

发表评论
We Used Ajax to Post Your Comment!
本站评论系统采用Ajax技术,无刷新发送评论
您的大名 *   
电子邮件  
5+6=? *(请输入“5+6=?”的结果)
评论内容 *