基于SQL语句的分页

基于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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值