大數據量、高效能場景下,預存程序分頁僅撈取當頁資料,效能遠優於全表撈回再篩選。
myPagingCREATE PROCEDURE dbo.myPaging
@pagesize INT, @currentPage INT, @total INT OUTPUT
AS
BEGIN
CREATE TABLE #temp (
ID INT IDENTITY(1,1),
CustomerID VARCHAR(50), CompanyName VARCHAR(50),
ContactName VARCHAR(50), ContactTitle VARCHAR(50), Phone VARCHAR(50)
);
INSERT INTO #temp SELECT CustomerID,CompanyName,ContactName,ContactTitle,Phone FROM Customers;
SELECT @total = (SELECT COUNT(*) FROM Customers);
DECLARE @startID INT, @endID INT;
SET @startID = (@currentPage-1)*@pagesize + 1;
SET @endID = @currentPage*@pagesize;
SELECT * FROM #temp WHERE ID BETWEEN @startID AND @endID;
END
不熟悉寫分頁 SP 可用線上產生器:https://www.webdiyer.com/AspNetPager/utility/sqlspgen.aspx
使用 Repeater + SqlDataAdapter 執行 SP,取回 @total 設定分頁控制項記錄總數,PageChanged 事件重新執行 SP 取得新頁資料。