Sql Server2005 的快速分頁 ROW_NUMBER() OVER (ORDER BY ReportID)

   前面一篇隨筆,我提到了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就是我們需要數據的頁數.很簡單,不是嗎?並且,這種方式幾乎沒有什麼限制,因爲他相當於對於任何檢索,都生成了一個新的排序列.我們就可以使用該列進行自定義分頁.

----2005.11.26 11:43 星期六 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章