SQL SERVER 分页(1)——利用ROW_NUMBER实现分页

时间:2022-12-26 00:33:41

       我们在开发过程中,分页是十分常见的功能,在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实现分页