[SQL Server]分頁功能的實現

來源:互聯網
上載者:User

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

以樣本資料庫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) + 1) AND (@RowsPerPage * @PageIndex)

這樣就實現了分頁功能,改變@RowsPerPage和@PageIndex的值即可看到效果。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.