1.实验目的
- 通过实验课程与理论课的学习深入理解掌握的存储过程的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用存储过程来进行数据库的应用程序的设计;
- 深入学习深刻理解与存储过程相关的T-SQL语句的编写的基本原理、编写方法与常见的编写规范,并通过与数据查询的T-SQL语句进行比较,充分了解其间的差异,从而进一步理解T-SQL语句编写代码的方法。
2.实验内容
- 创建并执行存储过程:交互式创建并执行一存储过程、用T-SQL创建一存储过程;
- 修改存储过程:交互式修改存储过程Pro_Qsinf、用SQL修改存储过程Pro_Qsinf;
- 删除存储过程:交互式删除存储过程Pro_Qsinf、用SQL删除存储过程Pro_Qscore。
3.实验步骤
3.1创建并执行存储过程
1.交互式创建并执行一个存储过程
(1)创建存储过程Pro_Qsinf:通过学生学号来查询学生的姓名、年龄、专业:
1)打开软件,点击【对象资源管理器】—>【数据库】—>【jiaoxuedb】—>【存储过程】—>【新建】:
2)根据题目要求,输入代码如下所示,点击执行,下方出现【命令已完成】表示存储过程新建成功,其编写代码主要为两个部分,基本方法与数据查询中编写代码类似:
(2)执行存储过程Pro_Qsinf,查询并显示默认学号为S1与S4学生的学号、年龄与专业:
新建查询,输入代码如下所示,其代码含义与数据查询的主要区别就在于,查询前需要通过DECLARE语句声明我们需要用到的形参变量,SELECT语句选中我们需要用到的形参,EXEC语句表示执行存储过程,后+存储过程名,PRINT语句后+我们要输出的结果形式;
本题目中比较特殊的为如果要查询显示默认值,无需用到SELECT语句,在EXEC语句后的存储过程的输入值中,将输入值设置为DEFAULT即可:
得到结果如下,符合题目要求与数据库表中的数据:
2.用T-SQL创建一个存储过程
(1)创建存储过程Pro_Qscore:通过学生姓名和课程名查询该生该课程的成绩
新建查询,输入代码如下所示,其代码含义为:上半部分:创建存储过程名,IN与OUT 表示根据什么数据得到什么数据,特别注意得到的数据后要+OUTPUT;下半部分:由一个AS连接,其编写的基本思路与数据查询的编写思路相似,需要特别注意的是要用等式将我们新建的形参与实际表中的参数连接起来:
(2)执行存储过程Pro_Qscore,查询并显示学生付2的数据结构课程的成绩:
新建查询,输入代码如下,其代码含义与数据查询的主要区别就在于,查询前需要通过DECLARE语句声明我们需要用到的形参变量,SELECT语句选中我们需要用到的形参,EXEC语句表示执行存储过程,后+存储过程名,PRINT语句后+我们要输出的结果形式:
得到结果如下,符合数据库表数据与题目要求,通过此步骤我们也可以发现,利用存储过程得到结果的一个好处就在于我们可以利用PRINT语句自定义我们想要的得到结果的形式:
3.2修改存储过程
1.交互式修改存储过程Pro_Qsinf
点击【对象资源管理器】—>【数据库】—>【jiaoxuedb】—>【存储过程】—>【dbo. Pro_Qsinf】—>【修改】,即可打开存储过程的编辑窗口,在编辑窗口处根据要求修改即可,在保证语法正确的基础上,存储过程名、形参类型、形参大小都是可以修改的部分:
2.用SQL修改存储过程Pro_Qsinf
将存储过程Pro_Qsinf的定义修改为根据学号查询姓名、性别、专业:
新建查询,输入代码如下所示,其代码含义,与其说是修改存储过程,更类似重新编写了一个存储过程,因为其基本的修改思路就是重新编写了一个存储过程,无论其属性需不需要修改,依然需要写在SQL语句中,其唯一的不同之处就在于上半部分为选中了存储过程Pro_Qsinf:
3.3删除存储过程
1.交互式删除存储过程Pro_Qsinf
点击【对象资源管理器】—>【数据库】—>【jiaoxuedb】—>【存储过程】—>【dbo. Pro_Qsinf】—>【删除】,即可删除存储过程,交互式方法相当的简单粗暴,也具有无法撤回性,本次实验中就未实际演示,了解即可:
2.用SQL删除存储过程Pro_Qscore
新建查询,输入代码如下所示,T-SQL语句中,DROP语句是非常通用的删除语句,一般的删除数据库、数据库表等都是利用DROP语句:
4.课后习题
1.利用学生姓名查询该生选修的课程名、成绩,以及任课教师姓名:
新建查询,输入代码如下所示,创建一个名为Pro_QSNO的存储过程:
2.利用学生姓名和课程名检索该生该课程的成绩:
新建查询,输入代码如下所示,创建一个名为Pro_S_SC的存储过程:
3.利用课程名查询选修该课程的学生姓名、系别、成绩,并给出“程序设计”课程的该查询信息:
新建查询,输入代码如下所示,创建一个名为PRO_CNAME的存储过程:
新建查询,输入代码如下所示,调用存储过程PRO_CNAME用于查询程序设计这门课程的相关信息:
结果如下图所示,符合数据库数据与题目要求,说明存储过程建立成功且正确:
4.利用教师姓名和课程名检索该教师该任课的课程名、课时数、选课人数、平均成绩、最高成绩,并查询教师“齐1”的“程序设计”课程的情况记录:
新建查询,输入代码如下所示,创建一个名为PRO_TN_CN的存储过程:
新建查询,输入代码如下所示,调用存储过程PRO_TN_CN用于查询教师‘齐1’教授的课程‘程序设计’的相关信息:
结果如下图所示,符合数据库数据与题目要求,说明存储过程建立成功且正确: