sqlserver 通用分页存储过程

网络编程 2025-03-29 10:27www.168986.cn编程入门

SqlServer中的通用分页存储过程:效率与时间的双赢策略

在大数据量环境下,如何高效地进行数据分页是一个重要的挑战。为此,我们可以使用SQL Server中的存储过程来实现这一功能。接下来,我将展示一个通用分页存储过程的创建方法,它不仅提高了效率,也节省了时间。

创建一个名为“monPagination”的存储过程,其参数包括:要显示的列名、要查询的表名、排序的列名、排序的方式(升序或降序)、查询条件、当前页索引和页大小(每页显示的记录条数)。还有一个输出参数用于获取总页数。

```sql

CREATE PROC monPagination

@columns VARCHAR(500), --要显示的列名,用逗号隔开

@tableName VARCHAR(100), --要查询的表名

@orderColumnName VARCHAR(100), --排序的列名

@order VARCHAR(50), --排序的方式,升序为asc,降序为desc

@where VARCHAR(100), --where 条件,如果不带查询条件,请用 1=1

@pageIndex INT, --当前页索引

@pageSize INT, --页大小(每页显示的记录条数)

@pageCount INT OUTPUT --总页数,输出参数

AS

BEGIN

DECLARE @sqlRecordCount NVARCHAR(1000) --得到总记录条数的语句

DECLARE @sqlSelect NVARCHAR(1000) --查询语句

SET @sqlRecordCount = N'SELECT @recordCount=COUNT() FROM ' + @tableName + ' WHERE ' + @where

DECLARE @recordCount INT --保存总记录条数的变量

EXEC sp_executesql @sqlRecordCount, N'@recordCount INT OUTPUT', @recordCount OUTPUT --动态sql传参

IF (@recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除

SET @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小

ELSE --如果总记录条数不能被页大小整除

SET @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1

SET @sqlSelect = N'SELECT ' + @columns + ' FROM (SELECT ROW_NUMBER() OVER (ORDER BY ' + @orderColumnName + ' ' + @order + ') AS tempid, FROM ' + @tableName + ' WHERE ' + @where + ') AS tempTableName WHERE tempid BETWEEN ' + STR((@pageIndex - 1) @pageSize + 1) + ' AND ' + STR(@pageIndex @pageSize)

EXEC (@sqlSelect) --执行动态Sql

END GO

```

以下是调用示例:假设我们使用的是名为“jobs”的表,想要获取第二页的job_id和job_desc信息以及总页数。可以这样调用存储过程:

```sql

USE pubs;

GO

DECLARE @pageCount INT;

EXEC monPagination 'job_id,job_desc','jobs','job_id', 'asc','1=1',2,2,@pageCount OUTPUT;

SELECT '总页数为' + STR(@pageCount);

```

上一篇:Iview Table组件中各种组件扩展的使用 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by