數據分頁是這個經常說的東西,無論在WEBForm還是WinForm中它都會被單獨拿出來,或者是公用組件,或者是公用類庫,反正對於數據分頁這個東西,總是我們關注的一個話題,但事實上,數據分頁歸根結底是數據庫的東西,更直接的說,它是數據表的范疇,對於一個SQL請求來說,你要取數據,要取多少條,從哪條開始取,這事實上就是分頁實現的原理。
SQL更新到2005版之后,為開發者提供了不少函數,ROW_NUMBER() OVER ()就是其中之一,它可以為你的結果集生成一個行號,並可以快速的主位到第幾條數據。
MSDN上對它的應用
1 USE AdventureWorks2012; 2 GO 3 SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, 4 FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD" 5 FROM Sales.vSalesPerson 6 WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
結果會把集合加上行號,如下:
在項目中,分頁功能的應用,代碼如下:
1 SELECT *FROM (SELECT ROW_NUMBER() OVER ( ORDER BY a.orderid ) AS row ,* 2 FROM dbo.Order_Info_View AS a 3 where CONVERT(CHAR(7),a.buytime,20)='2010-04'and a.agentid=3455) AS b 4 WHERE b.row BETWEEN 1 AND 20
事實上,把上面的代碼改一下,就可以方例的實現對某頁數據的統計了,呵呵
1 SELECT sum(totalfee) 2 FROM (SELECT ROW_NUMBER() OVER ( ORDER BY a.orderid ) AS row ,* 3 FROM dbo.Order_Info_View AS a 4 where CONVERT(CHAR(7),a.buytime,20)='2010-04'and a.agentid=3455) AS b 5 WHERE b.row BETWEEN 1 AND 20