1、存储过程

存储过程可以包含数据操纵语句、变量、逻辑 控制语句等,比如:单个select语句, select语句块,select语句与逻辑控制块。

存储过程优点: 

   执行速度更快

   允许模块化程序设计

   提高系统安全性

   减少网络流通量

由系统定义,存放在master数据库中

   类似C语言中的系统函数

   系统存储过程的名称都以“sp_”开头或”xp_”开头

用户自定义存储过程

语法:
  CREATE PROC[EDURE] 存储过程名
    @参数1 数据类型 = 默认值 OUTPUT,
    …… ,
    @参数n 数据类型 = 默认值 OUTPUT
    AS
    SQL语句
  GO

例子:请创建存储过程,查看本次考试平均分以及未通过考试的学员名单

create database test

use test

create table stuInfo
(
stuNo int identity(1,1) primary key ,
stuName varchar(1000) not null ,
stuAge int check(stuAge>=0 and stuAge<=130) not null,
stuSex char(2) default('男') not null,
stuAddress text not null
)

insert into stuInfo(stuName,stuAge,stuAddress) values('张三',20,'湖南省')

select * from stuInfo

create table stuMarks
(
stuMID int identity(1,1) primary key,
stuNo int not null references stuInfo(stuNo),
stuMMakes float not null,
stuMLungunger float not null
)

insert into stuMarks values(1,99,90),
(2,88,88),
(3,77,77),
(4,60,60),
(5,55,55),
(6,69,60)

  create proc stu_procstu--创建存储过程
  AS
  DECLARE @writtenAvg float,@labAvg float
  SELECT @writtenAvg=AVG(stuMMakes),@labAvg=AVG(stuMLungunger)
  FROM stuMarks
  print '笔试平均分:'+convert(varchar(10),@writtenAvg)
  print '机试平均分:'+convert(varchar(10),@labAvg)
  IF (@writtenAvg>70 AND @labAvg>70)
  print '本班考试成绩:优秀'
  ELSE
  print '本班考试成绩:较差'
  print '--------------------------------------------------'
  print ' 参加本次考试没有通过的学员:'
  SELECT stuName,stuInfo.stuNo,stuMMakes,stuMLungunger
  FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
  WHERE stuMMakes<60 OR stuMLungunger<60

  exec stu_procstu--调用执行存储过程
  drop proc stu_procstu--删除存储过程

存储过程的参数分为两种:输入参数和输出参数

输入参数:

  

--根据输入的参数查找本次考试没有通过的学员

  CREATE PROCEDURE proc_stu_para
  @writtenPass int,
  @labPass int
  AS
  print '--------------------------------------------------'
  print ' 参加本次考试没有通过的学员:'
  SELECT stuName,stuInfo.stuNo,stuMMakes,stuMLungunger
  FROM stuInfo
  INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
  WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
  GO

  exec proc_stu_para 60,80

输出参数

--查看本次及格分数线的一下的学员人数,检验分数线是否需要调整

  CREATE PROCEDURE proc_stu_out
  @notpassSum int OUTPUT,
  @writtenPass int=60,
  @labPass int=60
  AS

  SELECT stuName,stuInfo.stuNo,stuMMakes, stuMLungunger
  FROM stuInfo
  INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
  WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
  SELECT @notpassSum=COUNT(stuNo)      --改参数接受未满足条件的数量用于调用输出@notpassSum
  FROM stuMarks WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
  GO

  DECLARE @sum int     --调用存储过程,输入参数,检验输出值
  EXEC proc_stu_out @sum OUTPUT ,64
  print '--------------------------------------------------'
  IF @sum>=3
  print '未通过人数:'+convert(varchar(5),@sum)+ '人, 超过60%,及格分数线还应下调'
  ELSE
  print '未通过人数:'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分数线适中'
  GO

注意接收存储过程返回值时必须加output关键字

转载于:https://www.cnblogs.com/yhm9/p/10736243.html

sql 存储过程学习相关推荐

  1. PL/SQL 存储过程学习2 条件语句

    if...条件...then end if; ------------------ if...条件...then 语句1 else 语句2 end if; ----------------- if.. ...

  2. SQL Server存储过程学习(通俗易懂)

    存储过程简介 存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来 ...

  3. 对于mysql存储过程感想_存储过程学习心得

    存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...

  4. SQL Server 学习系列之五

    SQL Server 学习系列之五 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL 关键字) SQ ...

  5. 存储过程学习笔记(一)

    存储过程学习笔记(一)      存储过程是将具有规律并且经常使用的sql语句,写成可以接受参数的sql语句进行保存起来,给以后进行调用      一.存储过程的格式 ■■■■■■代码开始■■■■■■ ...

  6. ASP.NET简易教程3——SQL存储过程

    SQL存储过程 B/S结构下,离不开数据库,在接下来的学习时,要求读者至少知道少许的基本SQL语句(增删查改). 在进行正式编程时,简要介绍一下存储过程.存储过程就是将一系列的SQL语句集中置一个文件 ...

  7. 在Spring框架中使用SQL存储过程

    Spring框架也支持对SQL存储过程的调用,SQL存储过程是一组预先定义好的SQL语句,并存储到数据库管理系统中,外部程序可以直接调用执行.本课主要讨论在Spring框架中应用程序如何调用MySQL ...

  8. sql 存储过程 并发测试_SQL单元测试模拟存储过程

    sql 存储过程 并发测试 In this SQL Unit testing article, we will continue our journey with SQL unit testing. ...

  9. SQL SERVER学习记录

    SQL SERVER学习记录 //创建数据库,请先在D盘手动建立一个 backup的文件夹 create database sl on (name = 'sl',filename = 'd:\back ...

最新文章

  1. ResultSet转List
  2. Java8Stream
  3. 透明大页相关内核参数_透明大内存页Hugepage支持
  4. mysql业务数据库回退_理解MySQL数据库事务-隔离性
  5. S3上备份的json文件转存成parquet文件
  6. c3p0配置及泄露问题
  7. Python 水仙花数练习
  8. Hexo设置背景图片轮播效果
  9. 一行html代码微信透明头像,微信透明头像,微信空白名,立刻消失
  10. 小程序behavior
  11. 扒谱大杂烩-都是前辈写的
  12. ZIF-67沸石咪唑酯骨架结构材料/cas46201-07-4/2-MethylimidazoleCobaltsalt
  13. OWASP十大漏洞之一
  14. 筛选excel表格C++实现
  15. 网络核心交换机和普通交换机有什么区别?
  16. 2022电大国家开放大学网上形考任务-贸易实务(山东)非免费(非答案)
  17. CSS3理解position属性
  18. 第5章 8051单片机工作原理
  19. MT6169 RF System Datasheet资料介绍
  20. 沙河之痛——河南鲁山县沙河非法采砂遥感影像分析

热门文章

  1. 64岁Python之父:退休生活太无聊,我要加入微软,将开源进行到底
  2. 如何看待清华北大毕业生流失去国外?
  3. 布局自动驾驶L3级,探访北汽福田发动机生产基地!
  4. 首次公开!深度学习在知识图谱构建中的应用
  5. 逆生长!小鼠「逆龄疗法」登Nature子刊,有望用于人类
  6. Nature封面:只低一毫米,时间也会变慢!叶军团队首次在毫米尺度验证广义相对论...
  7. 物理史2000年来最精彩的对决!
  8. 边缘计算: 与5G同行,开拓蓝海新市场
  9. 边缘计算不再“边缘”
  10. 面对“超人革命”,我们是否已做好准备?