1. 程式人生 > >使用儲存過程進行分頁查詢

使用儲存過程進行分頁查詢


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