我們在開發過程中,分頁是十分常見的功能,在SQL SERVER 2012之前一般使用ROW_NUMBER來實作分頁的功能,測試資料如下:
--測試資料
if not object_id(N'T') is null
drop table T
Go
Create table T([ID] int,[姓名] nvarchar(22))
Insert T
select 1,N'張三' union all
select 2,N'李四' union all
select 3,N'王五' union all
select 4,N'趙六'
GO
--測試資料結束
翻頁存儲過程:
CREATE PROC PageTest
@CurrentPage INT, --目前頁
@PageSize INT --每頁多少條
AS
BEGIN
--把查詢表的id放到臨時表中
SELECT ID,
ROW_NUMBER() OVER (ORDER BY ID DESC) AS RowIndex
INTO #tb1_1
FROM T
WHERE ID<>0
--把分頁的需要查詢的id存到曆史表
SELECT t.ID
INTO #tb1_2
FROM #tb1_1 AS t
WHERE t.RowIndex > (@CurrentPage - 1) * @PageSize
AND t.RowIndex <= @CurrentPage * @PageSize;
--查詢本次分頁要查詢的資料和上邊存儲的id進行where查詢
SELECT *
FROM T
WHERE ID IN (
SELECT * FROM #tb1_2
)
ORDER BY ID DESC;
--删除臨時表
DROP TABLE #tb1_1;
DROP TABLE #tb1_2;
END;
測試:
EXEC dbo.PageTest @CurrentPage = 2, -- int
@PageSize = 2 -- int
結果如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvw1MZRlTwcGVPRTS6hFMG1mYw50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN5QDMxEzM0ETMxYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)