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关键字

sql 存储过程学习的更多相关文章

  1. SQL数据库问题 解释一下下面的代码 sql 存储过程学习

    SQL数据库问题 解释一下下面的代码 2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次 use mastergocreate proc killspid( ...

  2. [BILL WEI]SQL 存储过程学习

    --查看数据库exec sp_databases ;--查看表exec sp_tables ;--查看列exec sp_columns WMS_ASN;--查看索引exec sp_helpindex ...

  3. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  4. SQL server存储过程学习

    由于之前使用 Linq to Sql来操作数据库,对于数据库的存储过程.函数等比较薄弱.乘着自己闲着的时候,就百度自学了一点存储过程,以防以后要用. 基础通俗易懂的存储过程通过 存储过程学习 ,然后自 ...

  5. SQL server学习(三)T-SQL编程、逻辑控制语句和安全模式

    T-SQL编程 T-SQL编程与C语言类似,只是语法稍有不同而已,总体思想还是没有变化的.多的就不说了,还是从变量开始. 变量也分为全局变量和局部变量,表示方式稍有不同. 局部变量: 局部变量必须以标 ...

  6. SQL Server 学习系列之五

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

  7. SQL Sever 学习系列之一

    SQL Sever 学习系列之一 本学习系列,从实际工作需要中积累,对于一个新手而言,写出几条漂亮的查询语句,应该是可以受启发的. 一.问题的需求是:员工薪酬发放,现有资金能发放多少人,哪些人应得? ...

  8. SQL 语句学习

     Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and roo ...

  9. SQL server学习

    慕课网sql server学习 数据库第一印象:desktop--web server--database server** 几大数据库:sql server.oracle database.DB2. ...

随机推荐

  1. gitbook 入门教程之快速体验

    本文主要介绍三种使用 gitbook 的方式,分别是 gitbook 命令行工具,Gitbook Editor 官方编辑器和 gitbook.com 官网. 总体来说,三种途径适合各自不同的人群,找到 ...

  2. MySQL 多表查询 学习与练习

    一.介绍 首先先准备表 员工表和部门表 #建表 create table department( id int, name varchar(20) ); create table employee1( ...

  3. #Java学习之路——基础阶段二(第四篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  4. 【朝花夕拾】Android性能篇之(八)ANR篇--草稿

    1.ANR概念 2.ANR发生场景 Android开发者官网 上说到了两个原因:(1)点击按键或者触摸屏幕等输入事件在5s内没有响应:(2)10s内没有完成广播事件.如下所示: Android wil ...

  5. 【Android Studio安装部署系列】十五、Android studio添加Assets目录

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio新建项目时是没有assets目录,需要自己手动创建. app右键——New——Folder——Asset ...

  6. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个简单的Toast封装类. 效果图 API = 6.0 API = 4.4.2 代码分析 实现了不管我们触发多少次Toast调用, ...

  7. ConfirmCancelBottomSheetDialog【确认取消底部对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 继承BottomSheetDialog,实现简单的确认取消对话框样式. 效果图 代码分析 ConfirmCancelBottomSh ...

  8. API接口通讯参数规范

    通常在很多的公司里面,对于接口的返回值没做太大规范,所以会比较常看到各个项目各自定义随意的返回值,比如以下情况: 1. 直接返回bool值(True或者False) 2. 返回void,只要不是异常信 ...

  9. JSP 内置对象(上)

    JSP 内置对象是 Web 容器创建的一组对象,不使用 new 关键字就可以直接使用的对象.如上一章中使用脚本实现打印九九乘法表中的out对象 <%-- 脚本:out对象是JSPWriter类的 ...

  10. WebApiClient的SteeltoeOSS.Discovery扩展

    1 背景 从园子里看到一些朋友在某些项目开发中,选择的架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑,SteeltoeOSS.Discovery是dotnet和 ...