• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > SQL Server的通用分页存储过程 未使用游标,速度更快!

SQL Server的通用分页存储过程 未使用游标,速度更快!

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了分页,存储过程等相关知识,希望本文的分享对您有所帮助

使用SQL Server时,分页处理一直是个比较棘手的问题

正常情况下,SQL Server服务器上会对使用频率大的Table建立合适的索引
这样能大幅度的提高数据库本身的数据检索速度,建立索引的方法就不细说了

如果需要返回大量数据,从几百行到几万行,甚至几十万行数据
这时会发现响应速度越来越慢,甚至发生响应超时的错误
为了解决这种大数据量请求的问题,就不得不使用分页模式了

在这方面,JDBC就强悍得多,它可以将指定的行数和SQL请求一并发送给SQL Server,这样只返回分页后的数据,JDBC的原理还不清楚,但在实际使用中,速度还是非常快的

如果没办法使用JDBC,最常用的方法就是存储过程了!

我在写这个分页存储之前,参考了网上的大量相关文章,可以通过关键字:SQL Server 分页 进行搜索
他们主要都是利用SQL中的Top方法,并且对所检索的数据结构要求有标识列,如果没有标识列,或者是联合主键,那么就会非常麻烦了。而且对应用里原有的SQL检索部分需要修改的地方较多,工作量较大。

因此,我在写这个存储之前就要求一定要对原有的SQL脚本最大程度的兼容

经过一个下午的时间,和我一个同事(绝对是高手)的共同努力下,摸索出了以下的思路:

1、确定存储的输入参数:
1)SQL脚本,该参数接收完整的、正确的SQL检索文本,可将原应用中写好的SQL脚本直接传入
2)每页的数据容量,就是一页有多少条数据
3)当前页码
2、确定分页机制:
1)执行传入的SQL脚本,并将结果生成临时表
2)修改临时表的结构,增加标识列字段
3)根据标识列字段,计算出指定页码内的记录范围,并返回
4)返回总数据条数,用于客户端进行分页显示

根据以上的思路,编写出以下通用的分页存储过程:
代码如下:
[code]
--// ============================
--// SQL Server通用分页存储过程
--// Author : netwild
--// date : 2010/07/22
--// Email : netwild@163.com
--// QQ : 52100641(网无忌)
--// ============================

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


CREATE PROC execByPage

@sqlQuery varchar(2000), --//输入参数:SQL检索语句或表名
@pageSize int, --//输入参数:每页显示记录条数
@pageIndex int --//输入参数:当前页码

AS

SET NOCOUNT ON
SET ANSI_WARNINGS OFF

declare @tmpTableName varchar(50)
set @tmpTableName = '##TB1516_' + replace(cast(newid() as varchar(40)),'-','') --//生成随机临时表名称

declare @subIndex int
set @subIndex = charindex('from',@sqlQuery)
if (@subIndex > 0)
begin --//带FROM的标准检索语句
declare @sqlQuery1 varchar(2000)
declare @sqlQuery2 varchar(2000)
set @sqlQuery1 = substring(@sqlQuery,1,@subIndex - 1)
set @sqlQuery2 = substring(@sqlQuery,@subIndex,len(@sqlQuery))
set @sqlQuery = @sqlQuery1 + ',IDENTITY(numeric,1,1) as ID1516 into ' + @tmpTableName + ' ' + @sqlQuery2
end
else --//不带FROM的表名
begin
set @sqlQuery = 'select *,IDENTITY(numeric,1,1) as ID1516 into ' + @tmpTableName + ' from' + @sqlQuery
end
exec(@sqlQuery) --//建立并初始化临时表数据

declare @indexStart varchar(20),@indexEnd varchar(20)
set @indexStart = cast((@pageIndex-1)*@pageSize+1 as varchar(20)) --//数据起始行ID
set @indexEnd = cast(@pageIndex * @pageSize as varchar(20)) --//数据结束行ID

exec('select * from ' + @tmpTableName + ' where ID1516 between ' + @indexStart + ' and ' + @indexEnd) --//检索该页数据

exec('select max(ID1516) as recordCount from ' + @tmpTableName) --//提取总条数

exec('drop table ' + @tmpTableName) --//删除临时表


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

[/code]

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于mysql查询语句的使用详解
  • MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍
  • MySQL与Oracle的语法区别详细对比
  • MSSQL根据ID进行分页实现方法
  • MySQL 百万级分页优化(Mysql千万级快速分页)
  • SQL语句详解 MySQL update的正确用法
  • mysql部分替换sql语句分享
  • mysql SQL语句积累
  • mysql 查询第几行到第几行记录的语句
  • Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架

相关文章

  • 2017-05-11mysql求和函数使用示例
  • 2018-12-05MySQL高级十六——内存优化
  • 2018-12-05如何写一个属于自己的数据库封装(4)
  • 2018-12-05国内常见的数据库有哪些?各种数据库简介
  • 2018-12-05Mac上实现终端管理MySQL数据库
  • 2018-12-05SQL Server CROSS APPLY和OUTER APPLY的应用详解
  • 2017-05-11mysql 有关“InnoDB Error ib_logfile0 of different size”错误
  • 2017-05-11解析数据库分页的两种方法对比(row_number()over()和top的对比)
  • 2018-12-05【mysql教程】MySQL 处理重复数据
  • 2018-12-05远程连接mysql数据库注意事项记录(远程连接慢skip-name-resolve)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MYSQL数据库数据拆分之分库分表总结_MySQL
    • Mysql 数字类型转换函数
    • 讲解SQL中CHARINDEX函数
    • mysql进阶(二十四)防御SQL注入的方法总结
    • Mac 将mysql路径加入环境变量的方法
    • mysql-触发器的用法
    • SQL SERVER 2005 最小安装经验
    • mysql 导入导出数据库以及函数、存储过程的介绍
    • 分页查询 效率最高
    • PL/SQL数据类型及操作符

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有