目录

  • 第1单元    数据库系统导论
    • ● 任务1.1  数据库基本概念
    • ● 任务1.2  设计E—R 图
    • ● 任务1.3   将E-R图转换成关系模型
    • ● 任务1.4   练习与作业
    • ● 教与学参考资源
  • 第2单元   认识SQL SERVER数据库
    • ● 任务2.1 数据库应用场景
    • ● 任务2.3  SQL  Server 数据库安装
    • ● 任务2.4 SQL Server 的管理
    • ● 任务2.5  使用SSMS连接数据库
    • ● 教与学参考资源
  • 第3单元  创建和管理数据库
    • ● 任务3.1 创建数据库
    • ● 任务3.1(2)  命令创建数据库
    • ● 任务3.2 管理数据库
    • ● 任务3.2(2) 查看、收缩数据库
    • ● 教与学参考资源
  • 第4单元 创建和管理数据库表
    • ● 任务4.1 SQL Server常用数据类型
    • ● 任务4.2  创建数据表
    • ● 任务4.3  命令创建表
    • ● 任务4.4 实施完整性约束
    • ● 教与学参考资源
  • 第 5 单元   查询数据表
    • ● 任务5.1 单表数据查询
    • ● 任务5.2 多表数据查询
    • ● 任务5.3 嵌套查询
    • ● 任务5.4 合并查询结果
    • ● 教与学参考资源
  • 第6单元  管理表中数据
    • ● 任务6.1   添加数据
    • ● 任务6.2  修改数据
    • ● 任务6.3  删除数据
    • ● 习题与训练
    • ● 教与学参考资源
  • 第7单元  使用索引和视图
    • ● 任务7.1  使用索引
    • ● 使用T-SQL创建索引
    • ● 任务7.2  使用视图
    • ● 使用T-SQL语句创建视图
    • ● 教与学参考资源
  • 第8单元 Transact-SQL语言编程
    • ● 任务8.1   声明和使用变量
    • ● 任务8.2   流控语句
    • ● 任务8.3   常用系统函数
    • ● 任务8.4   创建自定义函数
    • ● 教与学参考资源
  • 第9单元  事务和锁
    • ● 任务   9.1     事务
    • ● 事务的基本操作
    • ● 任务9.2    锁
    • ● 死锁及避免方法(例)
    • ● 教与学参考资源
  • 第10单元  创建和管理存储过程
    • ● 任务10.1 存储过程及优点
    • ● 任务10.2 创建和执行存储过程
    • ● 任务10.3   存储过程参数和返回值
    • ● 任务10.4 修改、删除、 重新编译存储过程
    • ● 教与学参考资源
  • 第11单元 创建和管理触发器
    • ● 任务1 触发器的作用和分类
    • ● 任务2 触 发器的创建与执行
    • ● 任务3 创建级联触发器
    • ● 任务4 修改、删除触发器
  • 第12单元 创建和使用游标
    • ● 任务1  游标的作用及使用步骤
    • ● 任务2  创建基本游标
    • ● 任务3  使用变量保存游标数据
    • ● 任务4  使用循环环提取游标数据
  • 第13单元 SQL Server用户管理
    • ● 任务1数据库安全管理概述
    • ● 任务2SQL Server 安全机制
    • ● 任务3 账号、角色及权限管理
    • ● 任务4数据库完整性管理
    • ● 任务5 数据库的备份与还原
    • ● 任务6   数据的导入与导出
  • 第14单元  综合应用案例
    • ● 概述
    • ● 需求分析
    • ● 概述设计-逻辑设计- 物理设计
    • ● 编写数据库设计说明书
  • 学生做项目成果展示
    • ● 项目一  设计《我班同学数据库》
    • ● 项目二  设计《(Teaching)教学数据库》
    • ● 项目三  数据库应用系统设计开发项目
    • ● 项目四 《华夏-宿舍管理系统》设计开发
    • ● 项目五   综合实训大作业
    • ● 综合实训团队项目大作业
    • ● 学生完成项目摘录展示
  • 总复习与综合训练
    • ● 总复习
    • ● 综合训练一
    • ● 综合训练二
    • ● 综合训练三
    • ● 综合训练四
    • ● 综合训练五
    • ● 简答综合训练
  • 在线专题测验
    • ● 自检自测一
    • ● 自检自测二
  • 拓展   数据库管理工具平台  Navicat
    • ● 关于Navica
    • ● Navicat 的系统需求
    • ● Navicat 的用户界面
    • ● Navicat 创建数据库对象
    • ● 在Navicat创建的SQL 程序脚本
    • ● 在Navicat创建的SQL  server 脚本(2)
    • ● 综合实训(1)
    • ● 综合实训(2)
  • 技术拓展   (MYSQL)数据库技术与应用
    • ● MYSQL技术
  • 教与学图片剪影
    • ● 教学团队
    • ● 学生学习实训
    • ● 活动与交流
任务10.3   存储过程参数和返回值

任务10.3   存储过程参数和返回值

一 、指定默认参数

     在存储过程中,参数可以用来向存储过程中输入值,也可以从存储过程中输出值。下而将介绍在存储过程中使用参数的内容。

    在创建存储过程时,可以通过为参数指定默认值,而创建一个带有可选参数的存储过程。在执行该存储过程中,如果不传递该参数,则使用默认值。

     如果在创建存储过程时没有为参数指定默认值,并且在调用该存储过程的程序中也没有为该参数提供值,那么系统会返回错误信息。因此指定参数的默认值是有必要的。

二 、指定参数方向

       当调用程序执行存储过程时,所有过程参数都可以接收输入值。如果在存储过程中为某个参数指定OUTPUT选项,则存储过程将在执行完毕退出时向调用程序返回该参数的当前值。调用程序在调用该存储过程时,也必须使用OUTPUT关键字指定相对应的实参,并且该实参必须是一个变量而不能是一个常量,这样才能将该参数的返回值保存到变量中以便在调用程序中使用。

三 、使用RETURN语句

RETURN语句用于退出存储过程,返回到调用程序继续执行。

在【例】中已经看到了RETURN语句的使用,它是一个常用的使用RETURN语句返回分支的例子。可以看到,当存储过程遇到RETURN语句后立即返回,而后续的语句将不被执行。

在存储过程中可以使用RETURN语句返回一个被称为返回代码的整数值,以表明存储过程的状态。通常来说,返回0值代表成功,非0值代表失败。RETURN不能返回空值(null),如果某个过程试图返回空值(例如,使用RETURN@status,而@status为NULL),则将生成警告消息并返回O值。

调用程序在执行存储过程时,与OUTPUT参数一样,必须将返回代码保存到一个变量中,以便在调用程序中查看和使用该返回代码值。


例:带输入参数的存储过程

【例】在“学生成绩管理系统”的[教务数据库]中创建一个存储过程,该存储过程返回某年级某性别的学生信息。该存储过程接收两个输入参数,分别对应专业班级和性别,可在【查询编辑器】窗口中输入如下代码:

  USE [教务数据库]

  GO

  CREATE PROCEDURE GetStuInfoByCon @Grade char(4),@Sex nchar(1)

  AS

    SELECT * From  学生表

    WHERE 专业班级=@Grade AND 性别=@Sex


查阅存储过程程序代码

EXEC sp_helptext  存储过程名

例:

 EXEC sp_helptext  GetStuInfoByCon



存储过程的创建与执行

单击工具栏中【执行】按钮,创建该存储过程。

存储过程创建成功后,执行存储过程:

  EXECUTE  GetStuInfoByCon  ‘2011’, ‘女’

   执行结果如图9.2所示:



以下命令的执行结果与上面相同(年级改为2019):


  EXECUTE GetStuInfoByCon  @Grade=‘2019’,@Sex= ‘女’


  或者如下:


  DECLARE @ProcStu VarChar(20)


  SET @ProcStu =‘GetStuInfoByCon’


  EXECUTE @ProcStu  @Grade=‘2019’,@Sex= ‘女’





例:输入参数使用默认值的存储过程



【例】在“学生成绩管理系统”的[教务数据库]中创建一个存储过程,该存储过程返回根据姓氏查询得到的学生信息,如果未提供查询的姓氏,则默认查询姓张的学生信息。可在【查询编辑器】窗口中输入如下代码并执行:

  USE 教务数据库

  GO

  CREATE PROCEDURE SerachStuInfo  @SurName NVarchar(2)=‘张’

  AS

    SELECT * FROM  学生表

    WHERE 姓名 LIKE @SurName+’%’



执行该存储过程:


 EXECUTE SerachStuInfo ‘李’


执行结果如图(下)所示:






不带参数执行该存储过程:

  EXECUTE SerachStuInfo


执行结果如图所示:



使用输入参数

通过位置传递参数

在执行存储过程的语句中直接给出参数的值。当有多个参数时,给出的参数值的顺序与创建存储过程的语句中的参数顺序一致,即参数传递的顺序就是参数定义的顺序。

通过参数名传递参数

在执行存储过程的语句中,用参数名=参数值的形式给出参数值。


使用输出参数

通过定义输出参数,可以从存储过程中返回一个或多个值。定义输出参数需要在参数定义后加OUTPUT关键字。如下图所示。


例:带输出参数的存储过程


【例】在“学生成绩管理系统”数据库中创建一个存储过程,该存储过程根据专业班级返回学生人数。可在【查询编辑器】窗口中输入如下代码并执行:

  USE  教务数据库

 GO

  CREATE PROCEDURE GetNumByGrade @Grade Char(12),@Num INT OUTPUT

  AS

    SELECT @Num = COUNT(*)  FROM  学生表

          WHERE 专业班级=@Grade


执行该存储过程:

DECLARE @StuNum int

EXECUTE GetNumByGrade '19软件5班',@StuNum OUTPUT

SELECT '19软件5班'  专业班级,@StuNum  人数


执行结果如图所示:


通过RETURN返回值

在存储过程中除了可以返回输出参数以外,还可以有返回值,用来显示存储过程的执行情况。如下图所示。


例:创建存储过程:根据书号,查询某书是否借出。


CREATE  PROCEDURE  IsBorrowed

  @BookID int 

   AS

      DECLARE @BookState bit

       SELECT @BookState=是否借出

         FROM Books

           WHERE 图书编号 = @BookID 

              RETURN @BookState




--调用存储过程并获得返回值:

DECLARE @IsBorrowed bit

EXEC @IsBorrowed=IsBorrowed 1

IF @IsBorrowed=0

  PRINT '未借出'

ELSE

  PRINT  '已借出'