2分法分页存储过程脚本实例
对于大数据量的分页存储过程,我们一直在寻找最佳的解决方案。在众多的分页存储过程中,我发现了一种基于二分法的存储过程,这种存储过程在处理大量数据时表现出色。对于数据量在百万级别以上的情况,它有效地解决了传统分页方式中翻页越到后面加载越慢的问题。在网络上,我们可以找到许多关于分页存储过程的资料,但很多资料存在错误,被大量转载和修改,无法直接使用。为此,我对一个分页存储过程进行了修正和完善,供大家直接使用。
这个存储过程的参数相对较多,为了更好地在实际应用中使用,我设计了一个单独的封装类。页面调用时只需调用这个封装的类即可。这个类提供了多种方法,主要思路是提供灵活、便捷的操作方式。在这里分享给大家作为参考。
在代码修改方面,主要集中在处理排序和范围查询的部分。例如,当@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
-- 取得查询结果总数量
编程语言
- 2分法分页存储过程脚本实例
- php实现httpclient类示例
- AngularJS 入门教程之HTML DOM实例详解
- 深入Nginx + PHP 缓存详解
- jQuery中图片展示插件highslide.js的简单dom
- 最全面的百度地图JavaScript离线版开发
- javascript 注释代码的几种方法总结
- 基于PHP静态类的原罪详解
- PHP调用wsdl文件类型的接口代码分享
- nodejs后台集成ueditor富文本编辑器的实例
- 浅析.net简单工厂模式
- windows8.1下Apache+Php+MySQL配置步骤
- PHP SFTP实现上传下载功能
- 基于PHP实现的多元线性回归模拟曲线算法
- Java Servlet及Cookie的使用
- php自定义函数实现统计中文字符串长度的方法小