基于SQL语句的分页一般使用存储过程实现。它通过编写SQL查询,对数据进行筛选,仅返回当前页面所需的数据内容。要进行分页,首先必须要知道每页显示多少条(pageSize)、要显示第几页(pageIndex)。
基于SQL语句的分页方式的优势在于每次返回数据量较少(仅返回当前页所需的数据内容),适合大数据量的数据进行分页。
1、方式1:使用TOP语句实现分页(效率低,不推荐)
1.1 语法
SELECT TOP pageSize *
FROM 表
WHERE 条件
AND id NOT IN(
SELECT TOP pageSize * (pageIndex - 1) id
FROM 表
WHERE 条件 ORDER BY 排序条件
)
ORDER BY 排序条件
1.2 实例:创建存储过程,实现分页查询学生信息
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_SearchStudent' )
DROP PROCEDURE proc_SearchStudent
GO
/*---创建存储过程----*/
CREATE PROCEDURE proc_SearchStudent
@pageSize int=10, --页数
@pageIndex int=1 --页码
AS
SELECT TOP (@pageSize) *
FROM Student
WHERE 1=1
AND S# NOT IN(
SELECT TOP (@pageSize*(@pageIndex-1)) Id
FROM Student
WHERE 1=1 ORDER BY Id ASC
)
ORDER BY Id ASC
GO
1.3 测试:查询20条,第3页的学生信息
/*查询20条,第3页的学生信息*/
EXEC proc_SearchStudent @pageSize = 20 , @pageIndex = 3
2、方式2:使用ROW_NUMBER语句实现分页(推荐)
2.1 语法
SELECT * FROM(
SELECT ROW_NUMBER() OVER(ORDER BY 排序条件) AS RowNumber,* FROM 表
WHERE 条件
) TEMP_TABLE WHERE RowNumber BETWEEN (pageIndex - 1) * pageSize + 1 AND pageIndex * pageSize
2.2 实例:创建存储过程,实现分页查询学生信息。
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_PageStudent' )
DROP PROCEDURE proc_PageStudent
GO
/*---创建存储过程----*/
CREATE PROCEDURE proc_PageStudent
@pageSize int=10, --页数
@pageIndex int=1 --页码
AS
SELECT * FROM(
SELECT ROW_NUMBER() OVER(ORDER BY Id ASC) AS RowNumber,* FROM Student
WHERE 1=1
) TEMP_TABLE WHERE RowNumber BETWEEN (@pageIndex - 1) * @pageSize + 1 AND @pageIndex * @pageSize
GO
2.3 测试:查询20条,第3页的学生信息
/*查询20条,第3页的学生信息*/
EXEC proc_PageStudent @pageSize = 20 , @pageIndex = 3
3、C#中构建一个分页的应用
欢迎阅读本博客的另外一篇关于C#分页应用的文章:https://blog.csdn.net/pan_junbiao/article/details/50662530