使用儲存過程進行分頁查詢
阿新 • • 發佈:2019-01-10
USE DB_TEST
GO
--刪除原儲存過程
IF OBJECT_ID('dbo.pro_paging','P') IS NOT NULL
BEGIN
DROP PROC pro_paging;
END;
--建立儲存過程
CREATE PROC pro_paging
@pageIndex INT--使用者要查詢的頁碼
,@pageSize INT--每頁有幾條
,@out_recoreCount INT OUTPUT--資料總條數
,@out_pageCount INTOUTPUT--資料總頁數
AS
BEGIN
--(臨時表的名字在系統中有唯一字尾,故不同"回話"建立的同名臨時表不衝突)
--思想:不可以持續佔用資源等待其他資源釋放(會出現死鎖),所以,需要分步進行資料查詢,用記憶體換CPU處理速度
--將所要查詢的主表資料存進臨時表1
SELECT T.*
INTO #TEMP
FROM
(
SELECT *
,ROW_NUMBER() OVER(ORDER BY autoId) AS RN
FROM T_Users
) AS T;
--獲得資料的總條數和總頁數(向上取整)
SET @out_recoreCount=(SELECT COUNT(*) FROM #TEMP);
SET @out_pageCount=CEILING(@out_recoreCount/@pageSize);
--刪除不請求的資料-->不使用,本儲存過程想"用記憶體換CPU處理速度"
--DELETE FROM #TEMP
--WHERE RN NOT BETWEEN (@pageIndex-1)*@pageSize+1
AND @pageIndex*@pageSize;
--進行聯表查詢,獲得目標資料
SELECT T.autoId,T.loginId,TR.name
FROM #TEMP AS T
INNER JOIN T_relation AS TR
ON T.relationId=TR.autoId
WHERE T.RN NOT BETWEEN (@pageIndex-1) * @pageSize+1
AND @pageIndex * @pageSize;
END
GO