存储过程分页【亿万庞大数据分页】

REATE PROCEDURE page

@tblName   varchar(255),       -- 表名

@strGetFields varchar(1000) = ‘*‘, -- 需要返回的列

@fldName varchar(255)=‘id‘,      -- 排序的字段名

@PageSize   int = 10,          -- 页尺寸

@PageIndex int = 1,           -- 页码

@doCount bit = 0,   -- 返回记录总数, 非 0 值则返回

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 0:asc 1:desc

@strWhere varchar(1500) = ‘‘, -- 查询条件 (注意: 不要加 where)

@ID nvarchar(50)=‘id‘ --主表的列。。最好是主键

AS

declare @strSQL   varchar(5000)       -- 主语句

declare @strTmp   varchar(110)        -- 临时变量

declare @strOrder varchar(400)        -- 排序类

if @doCount != 0 begin

    if @strWhere !=‘‘

    set @strSQL = ‘select count(*) as Total from ‘ + @tblName+  ‘ where ‘[email protected]

    else

    set @strSQL = ‘select count(*) as Total from ‘ + @tblName + ‘‘

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else begin

    if @OrderType != 0 begin

        set @strTmp = ‘<(select min‘

        set @strOrder = ‘ order by ‘ + @fldName +‘ desc‘

        --如果@OrderType不是0,就执行降序,这句很重要!

    end

    else begin

        set @strTmp = ‘>(select max‘

        set @strOrder = ‘ order by ‘ + @fldName +‘ asc‘

    end

    if @PageIndex = 1 begin

        if @strWhere != ‘‘

            set @strSQL = ‘select top ‘ + str(@PageSize) +‘ ‘[email protected]+ ‘ from ‘ + @tblName + ‘ where ‘ + @strWhere + ‘ ‘ + @strOrder

        else

            set @strSQL = ‘select top ‘ + str(@PageSize) +‘ ‘[email protected]+ ‘ from ‘+ @tblName + ‘ ‘+ @strOrder

    --如果是第一页就执行以上代码,这样会加快执行速度

    end

    else begin

        --以下代码赋予了@strSQL以真正执行的SQL代码

        set @strSQL = ‘select top ‘ + str(@PageSize) +‘ ‘[email protected]+ ‘ from ‘

                      + @tblName + ‘ where ‘ + @fldName + ‘ ‘ + @strTmp + ‘( ‘+ @ID + ‘ ) from (select top ‘ + str((@PageIndex-1)*@PageSize) + ‘  ‘+ @fldName + ‘  from ‘ + @tblName  + @strOrder + ‘) as tblTmp)‘+ @strOrder

        if @strWhere != ‘‘

            set @strSQL = ‘select top ‘ + str(@PageSize) +‘ ‘[email protected]+ ‘ from ‘

                + @tblName + ‘ where ‘ + @fldName + ‘ ‘ + @strTmp + ‘(‘

                + @ID + ‘) from (select top ‘ + str((@PageIndex-1)*@PageSize) + ‘ ‘

                + @fldName + ‘ from ‘ + @tblName + ‘ where ‘ + @strWhere + ‘ ‘

                + @strOrder + ‘) as tblTmp) and ‘ + @strWhere + ‘ ‘ + @strOrder

    end

end

exec (@strSQL)

时间: 2024-10-07 05:02:13

存储过程分页【亿万庞大数据分页】的相关文章

前端实现分页 实现个数据分页函数

前端拿到所有数据实现分页函数代码如下: //分页数据处理函数 pageDataFn(number){ //处于第几页 number //保存每页数据的函数 pagedata = []; //pageSize 每页条数 //设置开始 let start = (pageSize * number) - pageSize; // 设置结束长度 let end = pageSize * number; //长度判断 //所有分页数据 getdata.children end = end > getdat

大数据分页实现与性能优化

摘要:Web 应用程序中经常使用数据分页技术,该技术是提高海量数据访问性能的主要手段.实现web数据分页有多种方案,本文通过实际项目的测试,对多种数据分页方案深入分析和比较,找到了一种更优的数据分页方案Row_number()二分法.它依靠二分思想,将整个待查询记录分为2部分,使扫描的记录量减少一半,进而还通过对数据表及查询条件进行优化,实现了存储过程的优化.根据Row_number()函数的特性,该方案不依赖于主键或者数字字段,大大提高了它在实际项目中的应用,使大数据的分页效率得到了更显著的提

【知了堂学习笔记】JSP页面数据分页实现(一)——分页概念以及主流数据库的分页查询

一.分页简介 1.分页,就是一种将数据库里的数据一部分展示给用户的技术.为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样.最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的. 2.分页的实现方式 1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来.这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式

数据分页

数据分页 1.数据分页七步走 ① 实例化模型 ② 通过count函数获取数据表中的总记录数 ③ 实例化Page分页类 ④ 调用show方法显示分页链接 ⑤ 调用limit方法实现分页程序 ⑥ 通过assign方法分配变量到模板文件 ⑦ 通过display方法显示输出模板内容 2.具体实现 1)在User控制器中的index方法实现分页七步走 2)在模板页面中调用相关数据

Servlet——实现数据分页显示

Servlet实现数据分页显示 1.数据分页的应用 在很多情况下,Web网页的显示结果都很多,不可能在一个页面完全显示出来,这时候就需要用到数据分页 比如我们很熟悉的Google搜索结果: 那么怎么通过Servlet实现这个功能呢? 2.Servlet连接数据库 首先我们的数据是存放在数据库中,那么就需要Servlet去连接数据库,从而获取数据. Servlet连接数据库的步骤同JavaSE连接数据库的操作一样其实Servlet本身也就是Java. 首先需要准备Java连接数据库的相关jar包不

一个高效的数据分页的存储过程 可以轻松应付百万数据

一个高效的数据分页的存储过程 可以轻松应付百万数据 CREATE PROCEDURE pageTest --用于翻页的测试--需要把排序字段放在第一列 (@FirstID nvarchar(20)=null, --当前页面里的第一条记录的排序字段的值@LastID nvarchar(20)=null, --当前页面里的最后一条记录的排序字段的值@isNext bit=null, --true 1 :下一页:false 0:上一页@allCount int output, --返回总记录数@pag

毫秒级百万数据分页存储过程[欢迎转载]

数据分页一直是一个经久不衰的话题,在园子里看到了N多高手,都比我厉害, 今天把我使用的分页代码继续分享;请高手手下留情,少拍砖啦...哈哈; 欢迎大家转载!!!! 首先参考园子里的高手方法生成一个百万数据表; 耗时 33 秒; 然后创建分页存储过程;这个是基于SQL 2005 的ROW_NUMBER的, SQL 2000 不适用; SQL 2008 我没有安装,所以也没有测试过!估计应该可以运行. 2种算法可以选择 1. 使用  BETWEEN   ;  2.  TOP  ; 代码中已经注释了.

SqlSever大数据分页

在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处.从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题.还是从一个实际项目开始介绍吧.中国铁建股份公司的项目表中数据很大,开发之初用的是GridView控件自带的分页,在运行一年以后,点击下一页终于是难以等待了,系统需要优化.对于分页的改进是业务的需要.于是,我采用了Row_number()函数分页.也算一解了燃眉之急. 说明:该篇文章只是一个案例的说明,更详细

Sql Server 数据分页

1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页. 2.常用的数据分页方法 我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法. 我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetailID(Guid),要求按照FlightsDetailID排序 取 3000001 到3000010 之间的10条记录,也是