数据库存储过程及简单分页知识

定义存储过程

CREATE PROCEDURE [拥有者存储过程名[;程序编号

利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:


CREATE PROC[EDURE] procedure_name [;number]


[


{@parameter data_type} ][VARYING] [= default][OUTPUT]



[,...n]


[WITH


{


RECOMPILE


| ENCRYPTION


| RECOMPILE, ENCRYPTION


}



[FOR REPLICATION]


AS


sql_statement [...n]


[ ]内的内容是可选项,而()内的内容是必选项,

  例:若用户想建立一个删除表tmp中的记录的存储过程Select_delete可写为:


Create Proc select_del As


Delete tmp

  例:用户想查询tmp表中某年的数据的存储过程


create proc select_query @year int as


select * from tmp where year=@year

  在这里@year是存储过程的参数

  例:该存储过程是从某结点n开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。

  空:表示该结点为顶层结点


fjdid(父结点编号)

  结点非空:表示该结点的父亲结点号


dwmc(单位名称)


CREATE proc search_dwmc @dwidold int,@dwmcresultvarchar(100) output


as


declare @stop int


declare @result varchar(80)


declare @dwmc varchar(80)


declare @dwid int


set nocount on


set @stop=1


set @dwmc=""


select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdwwhere id=@dwidold


set @result=rtrim(@dwmc)


if @dwid=0


set @stop=0


while (@stop=1) and (@dwid<>0)


begin


set @dwidold=@dwid


select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdwwhere id=@dwidold


if @@rowcount=0


set @dwmc=""


else


set @result=@dwmc+@result


if (@dwid=0) or (@@rowcount=0)


set @stop=0


else


continue


end


set @dwmcresult=rtrim(@result)

  使用exec pro-name [pram1 pram2.....



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

在数据库中进行分页操作时@pagesize
每页有多少条数据  @pageindex你要查第几页的数据


select top(@pagesize) * from Ticket where not markno  in (select top(@pagesize*(@pageindex-1)) markno from ticket)这句话分为三个部分第一部分是主句:select top(@pagesize) * from Ticket第二部分是条件:not markno 第三部分是一个子查询 (select top(@pagesize*(@pageindex-1)) markno from ticket) 要整个解释这句话就要如下解析主要目的是取头X条信息:X由pagesize的值决定;接着我们要限定一个条件,not markno in这其实是一个否定,mark no不在某些范围内的,接着我们要限定markno 不在的范围是哪些呢?就是select top(@pagesize*(@pageindex-1)) markno from ticket取前 @pagesize*(@pageindex-1) 的makrkno的值SQL的执行顺序按照括号优先级,从内自外执行的,所以执行的顺序及结果就是——先取出前n-1行数据的markno,然后取出不包含这些markno的数据,最后从这里面取出前10行


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis的分页原理可以通过深入了解Mybatis源码来理解。在Mybatis中,有两种分页方式:逻辑分页和物理分页。 逻辑分页是通过设置RowBounds来实现的。RowBounds是Mybatis提供的一个类,用于描述分页参数,包括页码和每页显示数量。在进行数据库查询时,Mybatis会根据设置的RowBounds参数来返回相应的分页结果。这种方式适用于小数据量的分页查询。 物理分页是通过在Mapper文件中编写分页语句来实现的。在Mapper文件中,我们可以使用不同数据库类型的分页语句,比如MySQL和PostgreSQL。这些分页语句会在数据库层面进行分页操作,返回指定页码和数量的结果。这种方式适用于大数据量的分页查询。 除了以上两种方式,Mybatis还提供了分页插件来实现分页功能。其中最常用的是PageHelper插件,它可以简化分页操作并支持多种数据库类型。该插件的实现原理是在调用查询前,通过ThreadLocal创建一个包含分页参数的Page对象,并将该对象存储在ThreadLocal中。然后在查询过程中,根据Page对象的参数进行分页处理。 总结来说,Mybatis的分页原理包括逻辑分页和物理分页两种方式,可以根据具体需求选择合适的方式来实现分页操作。同时,分页插件如PageHelper可以简化分页操作并提供多种数据库支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [一篇文章学通 Mybatis 分页相关知识](https://blog.csdn.net/valada/article/details/84933860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [MyBatis的分页原理](https://blog.csdn.net/web15085599741/article/details/123350219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值