Sql Server 2005 ROW_NUMBER 函数实现分页
生活随笔
收集整理的這篇文章主要介紹了
Sql Server 2005 ROW_NUMBER 函数实现分页
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
過去用SQL Server 2000分頁的,大多都用到了臨時表。SQL Server 2005 ROW_NUMBER 函數支持分頁,性能據說也非常不錯。
Paging Records Using SQL Server 2005 Database
Paging in SQL Server 2005
Sql Server 2005自定義分頁
最近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 2005里面,由于系統提供了內建的ranking函數,為了給Orders表生成行號,我們不再需要利用Identity字段。 例如,利用SQL Server 2005的ROW_NUMBER()函數,按orderID字段逆序排列,給Orders表生成行號的語句如下:
?
SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered FROM Orders ORDER BY rownum DESC 基于這些新的ranking函數,您可以跟方便的實現數據的分頁操作。 關于SQL Server 2005的T-SQL新特性,見文檔: [url]http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp[/url] 自由、創新、研究、探索……
Paging Records Using SQL Server 2005 Database
Paging in SQL Server 2005
Sql Server 2005自定義分頁
最近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 2005里面,由于系統提供了內建的ranking函數,為了給Orders表生成行號,我們不再需要利用Identity字段。 例如,利用SQL Server 2005的ROW_NUMBER()函數,按orderID字段逆序排列,給Orders表生成行號的語句如下:
?
SELECT ROW_NUMBER() OVER(ORDER BY ordered DESC) AS rownum, ordered FROM Orders ORDER BY rownum DESC 基于這些新的ranking函數,您可以跟方便的實現數據的分頁操作。 關于SQL Server 2005的T-SQL新特性,見文檔: [url]http://msdn.microsoft.com/sql/archive/default.aspx?pull=/library/en-us/dnsql90/html/sql_05tsqlenhance.asp[/url] 自由、創新、研究、探索……
轉載于:https://blog.51cto.com/shanyou/75024
總結
以上是生活随笔為你收集整理的Sql Server 2005 ROW_NUMBER 函数实现分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Excel与VBA开发》一书上市时间
- 下一篇: 网管日志-06.09.05