[SQL Server]分頁功能的實現

iSQlServer發表於2009-08-03

在進行一些查詢的時候,如果返回的結果集很大,那麼使用者可能會希望對這些結果進行分頁顯示。也就是說,可以指定每一頁顯示多少條記錄,以及要顯示哪一頁的記錄。

以示例資料庫AdventureWorks的Person.Contact表為例,現在希望顯示該表中的人名以及其稱呼。如果執行以下語句:

SELECT Title, FirstName, Lastname
FROM Person.Contact


那麼會一次過返回19972行記錄,面對這麼大的結果集真是頭疼……還好我們可以把結果進行分頁。

要實現分頁需要用到巢狀子查詢,該子查詢就是上面的SELECT語句,不過我們還要為其加上一列,該列用數字為每一行順序標識編號。這裡要使用ROW_NUMBER()函式:

SELECT ROW_NUMBER() OVER (ORDER BY ContactID) AS RowNum, Title, FirstName, Lastname
FROM Person.Contact


有了順序、唯一的編號,就可以在外部查詢中進行分頁,不過在這之前需要兩個變數,表示每頁顯示多少行和頁碼。然後在在外部查詢加一個WHERE子句和TOP子句。

完整的程式碼像這個樣子:

DECLARE @RowsPerPage int@PageIndex int

SET @RowsPerPage = 10
SET @PageIndex = 1 

SELECT sub.Title, sub.FirstName, sub.LastName
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ContactID) AS RowNum, Title, FirstName, Lastname
FROM Person.Contact) AS sub
WHERE sub.RowNum BETWEEN (@RowsPerPage * (@PageIndex - 1+ 1AND (@RowsPerPage * @PageIndex)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-611144/,如需轉載,請註明出處,否則將追究法律責任。

相關文章