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