天天看點

SQL SERVER 分頁(1)——利用ROW_NUMBER實作分頁

       我們在開發過程中,分頁是十分常見的功能,在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
           

       結果如下:

SQL SERVER 分頁(1)——利用ROW_NUMBER實作分頁