当前位置: 首页 > news >正文

实现千万级数据的分页显示

/*
 名称:spAll_DeleteNoneUnique
 输入:要查询的表名和字段列表
 输出:
 调用:
 说明:实现千万级数据的分页显示!可以在5秒内获取1448万条记录里的第1200页的100条记录,雄不?
 作者:铁拳
 邮件:
 网站:http://www.wellknow.net
 更新:20040610
 支持:http://bbs.wellknow.net
 版权:转述时请注明来源:用思维创造未来的Wellknow.net
*/

CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 字段名
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(100)        -- 临时变量
declare @strOrder varchar(400)        -- 排序类型

if @OrderType != 0
begin
    set @strTmp = "<(select min"
    set @strOrder = " order by [" + @fldName +"] desc"
end
else
begin
    set @strTmp = ">(select max"
    set @strOrder = " order by [" + @fldName +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " * from ["
    + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
    + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
    + @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
    + @strOrder

if @strWhere != ''
    set @strSQL = "select top " + str(@PageSize) + " * from ["
        + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
        + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
        + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
        + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ""
    if @strWhere != ''
        set @strTmp = " where " + @strWhere

    set @strSQL = "select top " + str(@PageSize) + " * from ["
        + @tblName + "]" + @strTmp + " " + @strOrder
end

if @IsCount != 0
    set @strSQL = "select count(*) as Total from [" + @tblName + "]"

exec (@strSQL)

GO


KINGMAP 发表于2004-07-30 1:36 PM  IP: 220.174.36.*
修改一点点便于其他人使用
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@OrderfldName varchar(255), -- 排序字段名
@StatfldName varchar(255), -- 统计字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @OrderfldName +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @OrderfldName +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " " + @fldName + " from ["
+ @tblName + "] where [" + @OrderfldName + "]" + @strTmp + "(["
+ @OrderfldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @OrderfldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @fldName + " from ["
+ @tblName + "] where [" + @OrderfldName + "]" + @strTmp + "(["
+ @OrderfldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @OrderfldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where " + @strWhere

set @strSQL = "select top " + str(@PageSize) + " " + @fldName + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end

if @IsCount != 0
set @strSQL = "select count(" + @StatfldName + ") as Total from [" + @tblName + "]"

exec (@strSQL)

GO

相关文章:

  • Linux 下 crontab 格式详解
  • UltraWebGrid根据单元格内容禁用checkbox列
  • Linux 指令篇:日期时间排程--crontab
  • liferay的contextpath问题
  • 与领导喝酒的18个应紧记的诀窍
  • Linux Samba - Peer/Peer Model
  • 用VB操纵DHTML(Document)对象
  • 向软件英雄致敬
  • 悟透JavaScript
  • Image 延迟加载 -- LazyLoad
  • 反其道而用之,把数组写入文件
  • 130个C#面试问题
  • PHP常用正则表达式汇总
  • 反其道而用之,把数组写入文件2
  • wget 批量下载并且按序号重命名 windows版
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Debian下无root权限使用Python访问Oracle
  • spring boot下thymeleaf全局静态变量配置
  • Spring-boot 启动时碰到的错误
  • 基于游标的分页接口实现
  • 批量截取pdf文件
  • 树莓派 - 使用须知
  • 探索 JS 中的模块化
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 微信开源mars源码分析1—上层samples分析
  • 项目管理碎碎念系列之一:干系人管理
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 正则表达式小结
  • 自动记录MySQL慢查询快照脚本
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # include “ “ 和 # include < >两者的区别
  • #include<初见C语言之指针(5)>
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (一)kafka实战——kafka源码编译启动
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • ***检测工具之RKHunter AIDE
  • .gitignore文件_Git:.gitignore
  • .naturalWidth 和naturalHeight属性,
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 的程序集加载上下文
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /bin/rm: 参数列表过长"的解决办法
  • @EnableWebMvc介绍和使用详细demo
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)