`
hcmfys
  • 浏览: 356235 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

存储过程实现分页 (载至网上) ——~——

阅读更多
 

存储过程实现分页

-------------------------------------------------------以下代码为存储过程代码

CREATE procedure   News_Class

--资讯新闻百万级分页

(

@StrWhere     varchar(100),--条件

@PageSize     int,         --页面大小

@PageIndex     int        --页面索引

)

AS

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

declare   @strCountSQL   varchar(2000)     -- 总记录主语句

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

Set @strTmp =" Select top " + str(@PageSize) + " Title,AddTime from Tb_News "   --此处注意,需几个字段读几个字段

if @StrWhere<>''

   Begin

  Set @strSQL=@strTmp + " where ID < (select min(ID) from (select top " + str((@PageIndex-1)*@PageSize)+" ID from Tb_News Where "+@StrWhere+"   order by ID desc)   as tblTmp ) and "+@StrWhere+" order by ID desc"

   set @strCountSQL="select count(ID) as countx from Tb_News Where "+@StrWhere+" "

   End

else

   Begin

   Set @strSQL=@strTmp + " where ID < (select min(ID) from (select top " + str((@PageIndex-1)*@PageSize)+" ID from Tb_News order by ID desc)   as tblTmp ) order by ID desc"

   set @strCountSQL="select count(ID) as countx from Tb_News "

   End

if @PageIndex = 1

   if @StrWhere<>''

       Begin

       Set @strSQL=@strTmp +" Where "+@StrWhere+" order by ID desc"

       End

   else

       Begin

       Set @strSQL=@strTmp +" order by ID desc"

       End

exec (@strSQL)

exec (@strCountSQL)

GO

分页的几种方案,及思路

分页方案一:(利用Not InSELECT TOP分页)

语句形式:

SELECT TOP 10 *

FROM TestTable

WHERE (ID NOT IN

          (SELECT TOP 20 id

         FROM TestTable

         ORDER BY id))

ORDER BY ID

SELECT TOP 页大小 *

FROM TestTable

WHERE (ID NOT IN

          (SELECT TOP 页大小*页数 id

         FROM

         ORDER BY id))

ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)

语句形式:

SELECT TOP 10 *

FROM TestTable

WHERE (ID >

          (SELECT MAX(id)

         FROM (SELECT TOP 20 id

                 FROM TestTable

                 ORDER BY id) AS T))

ORDER BY ID

SELECT TOP 页大小 *

FROM TestTable

WHERE (ID >

          (SELECT MAX(id)

         FROM (SELECT TOP 页大小*页数 id

                 FROM

                 ORDER BY id) AS T))

ORDER BY ID

-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)

create procedure XiaoZhengGe

@sqlstr nvarchar(4000), --查询字符串

@currentpage int, --N

@pagesize int --每页行数

as

set nocount on

declare @P1 int, --P1是游标的id

@rowcount int

exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页

set @currentpage=(@currentpage-1)*@pagesize+1

exec sp_cursorfetch @P1,16,@currentpage,@pagesize

exec sp_cursorclose @P1

set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:结论是:

分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

分页方案一:(利用Not InSELECT TOP分页)   效率次之,需要拼接SQL语句

分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

分享到:
评论

相关推荐

    模拟实现请求分页存储管理——最佳置换算法

    最佳置换算法 struct b {int x; //物理块存放的内容 int y; //第几次替换 int z; //需几次替换有相同的内容出现或替换后情况 }; 页面顺序由一数组定义,由于在最佳算法中需要记录每次置换后还有几次再次被调度,在...

    QTableWidget,QTableView分页的分页栏

    2. **实现分页逻辑**:添加两个成员变量,分别存储当前页号和每页条目数。在模型中添加一个新的方法,如`setPage(int pageNum, int itemsPerPage)`,用于切换页面。此方法会更新内部的页号和每页条目数,并重新计算`...

    ASP.NET源码——三层无存储过程分页Demo.zip

    在这个“ASP.NET源码——三层无存储过程分页Demo.zip”压缩包中,我们可以预见到一个使用ASP.NET技术实现的三层架构(Presentation Layer、Business Logic Layer、Data Access Layer)的无存储过程分页示例。...

    储存过程分页

    在存储过程中实现分页,就是将分页逻辑封装进存储过程,通过传入参数控制返回的数据量和页码。 二、存储过程分页的优点 1. 性能优化:相比于每次查询都执行完整的SQL语句,存储过程的预编译特性可以减少解析和编译...

    oracle存储过程通用分页

    这篇博客“Oracle存储过程通用分页”将深入探讨如何利用Oracle存储过程来实现高效、灵活的分页功能。 首先,理解分页的基本概念至关重要。分页是将大型数据集分成若干小块,每次只加载一部分数据到内存中,这样可以...

    通用分页存储过程——节省你的生命,N个存储过程变一个!!该存储过程几乎可以涵盖所有查询存储过程(目前本人还没有发现不能使用的)

    该存储过程几乎可以涵盖所有查询存储过程(目前本人还没有发现不能使用的) 参数:分页大小,第几页,需要得到的字段 ,需要查询的表 , 查询条件,排序的字段名,排序的类型,主键名称 输入参数即可查询,无论是...

    分页存储管理模拟C语言实现FIFO

    分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame)...

    sql存储过程分页

    因此,开发者需要通过自定义存储过程来实现分页逻辑。 ##### 1. 存储过程设计思路 - **输入参数**:存储过程接受一系列输入参数,包括表名、主键或唯一键字段、当前页码、每页显示的记录数、需要显示的字段列表、...

    Oracle通用数据库存储过程代码--高效分页存储过程

    标题“Oracle通用数据库存储过程代码——高效分页存储过程”表明这是一个适用于Oracle数据库的存储过程,主要用于实现高效的分页查询功能。 #### 描述解析 描述部分简述了此存储过程的特点:“Oracle通用数据库存储...

    操作系统实验报告+源代码 基本分页存储管理

    操作系统实验报告中的主题是“基本分页存储管理”,这是一个核心的操作系统概念,旨在解决内存管理和虚拟地址到物理地址转换的问题。在本次实验中,学生通过编写源代码模拟了一个基本的分页存储管理系统。 分页存储...

    ORACLE存储过程分页

    本文将详细解析如何通过Oracle存储过程来实现分页功能,并提供一个实际的例子——员工信息查询分页。 #### 存储过程P_FENYE:实现分页查询 存储过程`P_FENYE`是用于执行分页查询的核心。其参数包括: - `V_LIST ...

    操作系统实验4-请求分页存储管理模拟实验.doc

    通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求分页存储管理系统的原理和实现技术的理解。下面是实验的详细说明和相关知识点: 实验目的 了解请求分页存储管理系统的原理和实现技术,通过模拟实验...

    jsf分页——详细源码 测试通过

    这个"jsf分页——详细源码 测试通过"的压缩包文件提供了一个实现JSF分页功能的详细源代码,且经过了测试验证其有效性和可靠性。 JSF是一种Java web应用程序的组件模型框架,它允许开发人员使用可重用的UI组件来构建...

    安卓Android源码——gridview分页效果.zip

    "安卓Android源码——gridview分页效果.zip"这个压缩包可能包含了一个实现GridView分页效果的示例项目。HorizontalGridView是GridView的一个扩展,它使得数据可以横向滚动,提供了更丰富的界面展示方式。 首先,...

    文章分页——js ,拿来就用

    这样,`PageNum`数组存储了每个页面的字数范围,`PageTitle`数组则用于储存每个页面的标题。 2. **根据[NextPage]手动分页**: 当设置`flag = 2`时,代码会查找文本中的`[NextPage]`标记来划分页面。通过遍历文章...

    操作系统——基本分页报告

    操作系统中的基本分页机制...通过这个实验,学生不仅能理解分页存储管理的基本概念,还能掌握页表、内存分配和回收的实现方法。这有助于深入理解操作系统如何高效地管理内存,为后续学习更复杂的内存管理策略打下基础。

    C语言实现 + 存储管理实验 + CPP源程序 + 实现页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)页面置换算法

    用C语言模拟实现请求式分页管理。要求实现:页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。 提示:可先用动态申请的方式申请一大块空间,...

    北大青鸟y2 asp分页存储过程

    - **分页存储过程**:标签进一步强调了文章的核心内容——使用存储过程来实现分页功能。 #### 部分内容解析 下面是对给出的SQL存储过程代码的详细解析: ```sql create PROC [dbo].[up_t35_GetRecByTable] -- 定义...

Global site tag (gtag.js) - Google Analytics