我们在开发过程中,分页是十分常见的功能,在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
结果如下: