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

存储过程浅入深出

一、定义

1、一种为了完成特定功能的一个或一组SQL语句集合。经编译后存储在服务器端的数据库中,可以利用存储过程来加速SQL语句的执行。
2、调用名称,传入参数,执行来完成特定功能。

3、分类:

  • 系统存储过程:master数据库中,其他数据库中是可以直接调用,并且不必在前面加上数据库名,创建数据库时,这些系统存储过程在新的数据库中自动创建。
  • 自定义存储过程:用户自己创建,特定功能而创建。可以传入参数,也可以有返回值,表明存储过程 执行是否成功。里面可以只是一个操作,也可以包括多个。

         执行:execute / exec 存储过程名 参数列表(多个参数,以逗号隔开)

  执行:
execute / exec 存储过程名 参数列表(多个参数,以逗号隔开)

优点:

  • 提高应用程序的通用性和可移植性。多次调用,而不必重新再去编写,维护人员可以随时修改。
  • 可以更有效的管理数据库权限。
  • 提高执行SQL的速度。
  • 减轻服务器的负担。

缺点:专门维护它,占用数据库空间。

二、应用

1.编写一个不带参数存储过程

--在hydata数据库中创建简单不带参的存储过程
create proc usp_select_STusers
 AS
 begin
	select * from STUsers where UserName like'%小高'    --查询STusers表
 end

 exec usp_select_STusers

2.编写一个带参数存储过程,实现两个数的和

 create proc usp_add_num
 @n1 int,
 @n2 int
 as
 begin
    select @n1+@n2
 end

 exec usp_add_num 100,300
3.创建一个带参数的存储过程、
--需要 DECLARE 声明:declare 变量名 变量类型 仅仅在定义它的 BEGIN...END 中有效,
--且在 BEGIN...END 中,只能放在第一句

create proc AddUserInfo
@UserName varchar(50),
@UserPwd varchar(50),
@Age int,
@DeptId int
as
begin
   declare @time datetime  --定义局部变量
   select @time ='2019-11-15'  --赋值
   insert into UserInfos(UserName,UserPwd,CreateTime,Age,DeptId) 
   values (@UserName,@UserPwd,@time,@Age,@DeptId);
   delete from UserInfos where UserId=17;
   select * from UserInfos
end
go

3.编写一个存储过程,实现根据指定的参数进行数据查询
@max
@min

create proc usp_select_score
as
begin
    select * from tableScore where tenglish between @max and @min
end

4、写一个简单的分页存储过程

create proc usp_select_table
@pagesize int=10,    --每页记录条数
@pageindex int=1,    --当前要查看第几页的记录
@count int output,    --总记录条数
@pagecout int output    --总页数
as
begin
    --1,编写查询语句,把用户要用的数据查询出来
    select STusers.name,STusers.id,STusers.age,STusers.sex,STusers.birthday
    from table    where stusers.id=11

    --2,计算总的记录数
    set @count=(select count(*) from stusers)

    --3,计算总的页数(ceiling向上取整)
    set @pagecount=ceiling(@count*1.0/pagesize)
end

5、编写一个分页存储过程,针对stusers表,通过ado.net调用该存储过程,实现分页

6、把刚才的事物转账,封装到一个存储过程中,通过ado.net调用该存储过程,实现分页

7、通过存储过程实现对stusers 表的增删改查 

三、变量的声明和使用

  1. 用户变量:以"@"开始,形式为"@变量名"。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
  2. 全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量
  3. 会话变量:只对连接的客户端有效。
  4. 局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量

局部变量用户变量的区分在于两点:

1.用户变量是以"@"开头的。局部变量没有这个符号。

2.定义变量不同。用户变量使用set语句,局部变量使用declare语句定义

3.作用范围。局部变量只在begin-end语句块之间有效。在begin-end语句块运行完之后,局部变量就消失了。

层次关系是:变量包括局部变量用户变量。用户变量包括会话变量和全局变量。

Select和Set给变量赋值

  • 定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,
  • 使用Set对存储过程变量赋值为直接赋值,
  • 使用Select则一般从数据表中查找出符合条件的属性进行赋值操作。

例如,下面定义一个存储过程年龄字段@Age字段。

  • Declare @Age int;
  • 使用Set方式赋值的语句可写作为:Set @Age=32;

从表UserTable中查找出名字为张三的人的年龄,然后将之赋值给@Age变量,就得使用Select方式来赋值了,赋值方式如下:

Select @Age=Age FROM UserTable Where Name='张三';

相关文章:

  • 一零二四、pyspark在jupyter中的完美运行
  • Nginx监控模块
  • mybatis的test坑(不等于‘‘ 且 不等于0)
  • 使用IDEA快速部署到Docker云端
  • 全志T507 UART复用方法-飞凌嵌入式知识库
  • 【机器学习】过拟合和欠拟合怎么判断,如何解决?(面试回答)
  • 2022年数模国赛冲刺之模型复习2
  • 程序包lombok不存在,纠正网上错误答案
  • css知识点总结
  • 【Rust日报】2022-08-29 RLS 谢幕
  • 【Python黑科技】图片太大不能上传?三种压缩图片大小的方法(代码注释详细)
  • hadoop生态圈面试精华之Yarn
  • 阿里云:加大NoSQL数据库软硬件一体化技术自研
  • 机构用户注册/登录的设计
  • 面向对象-多态
  • CSS居中完全指南——构建CSS居中决策树
  • HTML5新特性总结
  • HTTP中的ETag在移动客户端的应用
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 阿里研究院入选中国企业智库系统影响力榜
  • 聊聊directory traversal attack
  • 如何编写一个可升级的智能合约
  • 用element的upload组件实现多图片上传和压缩
  • 用Visual Studio开发以太坊智能合约
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #微信小程序:微信小程序常见的配置传值
  • (4) PIVOT 和 UPIVOT 的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (第27天)Oracle 数据泵转换分区表
  • (转)Sql Server 保留几位小数的两种做法
  • *上位机的定义
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 材料检测系统崩溃分析
  • .NET 中让 Task 支持带超时的异步等待
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20171106]配置客户端连接注意.txt
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [BT]BUUCTF刷题第8天(3.26)
  • [C++提高编程](三):STL初识
  • [CDOJ 1343] 卿学姐失恋了
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [GN] Vue3快速上手1
  • [go] 迭代器模式
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练
  • [Gym-102091E] How Many Groups