分页的存储过程使用方法详解

分页的存储过程通常需要三个参数:

1. @pageIndex – 当前页码,从1开始

2. @pageSize – 每页显示条数

3. @totalRows – 总记录数存储过程会根据这三个参数查询当前页的数据并返回。举例:

CREATE PROCEDURE [dbo].[usp_Pagination]  
@pageIndex INT,  
@pageSize INT,
@totalRows INT OUTPUT
AS
BEGIN
    DECLARE @startRow INT, @endRow INT
    SET @startRow = (@pageIndex - 1) * @pageSize + 1   
    SET @endRow = @pageIndex * @pageSize
    SELECT * FROM table_name  
    WHERE id BETWEEN @startRow AND @endRow  
    SET @totalRows = @@ROWCOUNT
END

调用存储过程:

DECLARE @totalRows INT  
EXEC usp_Pagination 1, 10, @totalRows OUTPUT  
SELECT @totalRows AS 'TotalRows'

这会查询table_name表中id为1-10的数据,并将总记录数赋值给@totalRows变量。那么客户端如何根据这个存储过程实现分页呢?

1). 先调用存储过程,传入页码@pageIndex和页大小@pageSize,同时定义一个变量接收@totalRows的输出值。

2). 根据@totalRows总记录数计算总页数totalPages。

3). 根据当前页码@pageIndex判断上一页和下一页的页码,用于生成页码导航。

4). 在界面上展示当前页的数据以及页码导航,点击页码导航时重新调用存储过程查询新的当前页数据。以ASP.NET为例,代码可以这样实现:

csharp
SqlCommand cmd = new SqlCommand("usp_Pagination", con);
cmd.CommandType = CommandType.StoredProcedure;  
cmd.Parameters.AddWithValue("@pageIndex", pageIndex);  
cmd.Parameters.AddWithValue("@pageSize", pageSize);
cmd.Parameters.Add("@totalRows", SqlDbType.Int);
cmd.Parameters["@totalRows"].Direction = ParameterDirection.Output;
con.Open();  
cmd.ExecuteNonQuery();
int totalRows = (int)cmd.Parameters["@totalRows"].Value;
int totalPages = (int)Math.Ceiling((double)totalRows / pageSize); 

以上就是分页存储过程的实现方法和客户端调用详解。

分页是很常用的功能,掌握分页存储过程和计算页码的方法可以让我们轻松实现复杂应用中的分页。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论