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'教授的课程'程序设计'的相关信息:

结果如下图所示,符合数据库数据与题目要求,说明存储过程建立成功且正确:
