【SQL Server】华中农业大学空间数据库实验报告 实验八 存储过程

1.实验目的

  1. 通过实验课程与理论课的学习深入理解掌握的存储过程的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用存储过程来进行数据库的应用程序的设计;
  2. 深入学习深刻理解与存储过程相关的T-SQL语句的编写的基本原理、编写方法与常见的编写规范,并通过与数据查询的T-SQL语句进行比较,充分了解其间的差异,从而进一步理解T-SQL语句编写代码的方法。

2.实验内容

  1. 创建并执行存储过程:交互式创建并执行一存储过程、用T-SQL创建一存储过程;
  2. 修改存储过程:交互式修改存储过程Pro_Qsinf、用SQL修改存储过程Pro_Qsinf;
  3. 删除存储过程:交互式删除存储过程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'教授的课程'程序设计'的相关信息:

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

相关推荐
你想考研啊1 分钟前
mysql数据库导出导入
数据库·mysql·oracle
十年编程老舅1 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20231 小时前
Vue复习
linux·服务器·数据库
云边有个稻草人1 小时前
深度解析:KingbaseES高可用架构落地原理与生产运维实战
数据库·读写分离·数据库运维·金仓数据库·国产数据库技术·数据备份恢复
满天星83035772 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
我不介意孤独3 小时前
04-记忆系统为什么向量数据库不够用
数据库·人工智能·资源隔离·agent infra
AOwhisky3 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
qq21084629534 小时前
【数据库】TDengine 清理旧数据
数据库·oracle·tdengine
j_xxx404_4 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
持敬chijing4 小时前
Web渗透之SQL注入-二次注入(Second-Order SQL Injection)
sql·安全·web安全·网络安全·网络攻击模型·安全威胁分析