2分法分页存储过程脚本实例

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

对于大数据量的分页存储过程,我们一直在寻找最佳的解决方案。在众多的分页存储过程中,我发现了一种基于二分法的存储过程,这种存储过程在处理大量数据时表现出色。对于数据量在百万级别以上的情况,它有效地解决了传统分页方式中翻页越到后面加载越慢的问题。在网络上,我们可以找到许多关于分页存储过程的资料,但很多资料存在错误,被大量转载和修改,无法直接使用。为此,我对一个分页存储过程进行了修正和完善,供大家直接使用。

这个存储过程的参数相对较多,为了更好地在实际应用中使用,我设计了一个单独的封装类。页面调用时只需调用这个封装的类即可。这个类提供了多种方法,主要思路是提供灵活、便捷的操作方式。在这里分享给大家作为参考。

在代码修改方面,主要集中在处理排序和范围查询的部分。例如,当@Sort=0时,我们需要设置@strTmp为某种特定的值来配合查询最小的记录;而当@Sort不为0时,我们需要设置@strTmp配合查询最大的记录。这样的代码逻辑在修正的存储过程中得到了很好的实现。

这个存储过程还包含了大约94行的代码,主要用于显示记录条数、分页数等信息。如果你不需要这部分功能,可以选择去掉。这个设计考虑到了不同用户的需求,提供了更加灵活的使用方式。

代码片段如下:

```sql

-- 定义一个存储过程,用于分页查询

ALTER PROCEDURE [dbo].[proc_ListPage]

-- 参数说明

@tblName nvarchar(200), -- 要显示的表或多个表的连接

@fldName nvarchar(500), -- 要显示的字段列表

@pageSize int = 10, -- 每页显示的记录个数

@page int = 1, -- 要显示哪一页的记录

@fldSort nvarchar(200) = null, -- 排序字段列表或条件

@Sort bit = 0, -- 排序方法,默认为升序

@strCondition nvarchar(1000) = null, -- 查询条件,不需where关键字

@ID nvarchar(150), -- 主表的主键

@Dist bit = 0, -- 是否添加查询字段的 DISTINCT,默认不添加

@pageCount int = 1 output, -- 查询结果分页后的总页数

@Counts int = 1 output -- 查询到的记录数

AS

BEGIN

SET NOCOUNT ON; -- 关闭计数

-- 定义变量用于存放动态生成的SQL语句

Declare @sqlTmp nvarchar(1000)

Declare @strTmp nvarchar(1000) -- 存放取得查询结果总数的查询语句

Declare @strID nvarchar(1000) -- 存放取得查询开头或结尾ID的查询语句

Declare @strSortType nvarchar(10) -- 数据排序规则A

Declare @strFSortType nvarchar(10) -- 数据排序规则B

Declare @SqlSelect nvarchar(50) -- 对含有DISTINCT的查询进行SQL构造

Declare @SqlCounts nvarchar(50) -- 对含有DISTINCT的总数查询进行SQL构造

-- 判断是否添加 DISTINCT 关键字

if @Dist = 0

begin

set @SqlSelect = 'select '

set @SqlCounts = 'Count(0)'

end

else

begin

set @SqlSelect = 'select distinct '

set @SqlCounts = 'Count(DISTINCT ' + @ID + ')'

end

-- 判断排序方式

if @Sort = 0

begin

set @strFSortType = ' ASC '

set @strSortType = ' DESC '

end

else

begin

set @strFSortType = ' DESC '

set @strSortType = ' ASC '

end

-- 生成查询语句

if @strCondition is null or @strCondition='' -- 没有设置显示条件

begin

set @sqlTmp = @fldName + ' From ' + @tblName

set @strTmp = @SqlSelect + '@Counts=' + @SqlCounts + ' FROM ' + @tblName

set @strID = ' From ' + @tblName

end

else

begin

set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition

set @strTmp = @SqlSelect + '@Counts=' + @SqlCounts + ' FROM ' + @tblName + ' where (1>0) ' + @strCondition

set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition

end

-- 取得查询结果总数量

上一篇:php实现httpclient类示例 下一篇:没有了

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