SQL Server 2005: 利用新的ranking函數實現高效的資料分頁操作

來源:互聯網
上載者:User
server|分頁|函數|資料 最近MSDN Magazine上的一篇文章10 Tips for Writing High-Performance Web Applications提到了有效資料分頁技術對提高ASP .NET程式效能的重要性;並給出了一個實現資料分頁的stored procedure的例子,抄錄如下:



CREATE PROCEDURE northwind_OrdersPaged

(

@PageIndex int,

@PageSize int

)

AS

BEGIN

DECLARE @PageLowerBound int

DECLARE @PageUpperBound int

DECLARE @RowsToReturn int



-- First set the rowcount

SET @RowsToReturn = @PageSize * (@PageIndex + 1)

SET ROWCOUNT @RowsToReturn



-- Set the page bounds

SET @PageLowerBound = @PageSize * @PageIndex

SET @PageUpperBound = @PageLowerBound + @PageSize + 1



-- Create a temp table to store the select results

CREATE TABLE #PageIndex

(

IndexId int IDENTITY (1, 1) NOT NULL,

OrderID int

)



-- Insert into the temp table

INSERT INTO #PageIndex (OrderID)

SELECT

OrderID

FROM

Orders

ORDER BY

OrderID DESC



-- Return total count

SELECT COUNT(OrderID) FROM Orders



-- Return paged results

SELECT

O.*

FROM

Orders O,

#PageIndex PageIndex

WHERE

O.OrderID = PageIndex.OrderID AND

PageIndex.IndexID > @PageLowerBound AND

PageIndex.IndexID < @PageUpperBound

ORDER BY

PageIndex.IndexID



END



在SQL Server 2000裡面,由於沒有一個有效進行ranking操作的方法,所以該例子先建立了一個有Identity欄位的暫存資料表,利用Identity欄位的自增長特性,間接的為Orders表的每一行按orderID逆序賦予了一個行號, 然後基於這個行號實現分頁。



在SQL Server 2000裡面,由於系統提供了內建的ranking函數,為了給Orders表產生行號,我們不再需要利用Identity欄位。



例如,利用SQL Server 2000的ROW_NUMBER()函數,按orderID欄位逆序排列,給Orders表產生行號的語句如下:



SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered

FROM Orders

ORDER BY rownum DESC



基於這些新的ranking函數,您可以跟方便的實現資料的分頁操作。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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