一、实验目的
1、掌握存储过程的定义和执行方法。
2、了解触发器的定义和执行方法。
二、实验内容与步骤
1、存储过程
(1)(无参数)用命令方式创建并执行一个存储过程,查询成绩不及格的学生的学号姓名专业、课号课名及相应分数。(语法格式可参考教材例6.13)
语句:
USE StudentCourse
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'Stu_info' AND type = 'P')
DROP PROCEDURE Stu_info
GO
CREATE PROCEDURE Stu_info
AS
SELECT a.学号,a.姓名,a.专业名,c.课程号,c.课程名,b.成绩
FROM Student a JOIN StuCourse b
ON a.学号 = b.学号 LEFT JOIN Course c
ON b.课程号 = c.课程号
WHERE b.成绩 < 60
GO
EXECUTE Stu_info结果:

(2)(带输入参数)用命令方式创建并执行一个的存储过程,该存储过程带有输入参数@stu_no,从选课表中查询学号是@stu_no的学生的选课信息。(语法格式可参考教材例6.14)
语句:
USE StudentCourse
IF EXISTS(SELECT name FROM sysobjects
WHERE name = 'StuCou_info'AND type = 'P')
DROP PROCEDURE StuCou_info
GO
CREATE PROCEDURE StuCou_info
@stu_no CHAR(6)
AS
SELECT b.学号,a.课程号,a.课程名
FROM Course a left join StuCourse b on a.课程号 = b.课程号
WHERE b.学号 = @stu_no
GO
EXEC StuCou_info @stu_no = '070101'
结果:

(3)(带输入参数和输出参数)用命令方式创建并执行一个的存储过程,该存储过程带有输入参数@stu_no和输出参数@stu_avg,从选课表中查询学号是@stu_no的学生的成绩平均分并赋值给输出参数@stu_avg。(语法格式可参考教材例6.16)
语句:
USE StudentCourse
IF EXISTS(SELECT name FROM sysobjects
WHERE name = 'Total_info'AND type = 'P')
DROP PROCEDURE Total_info
GO
CREATE PROCEDURE Total_info
@stu_no char(6),
@stu_avg real OUTPUT
AS
SELECT @stu_avg = AVG(成绩)
FROM StuCourse
WHERE 学号 = @stu_no
GO
DECLARE @tot real
EXEC Total_info'070101',@tot OUTPUT
SELECT '070101' AS 学号,@tot AS 平均成绩
结果:

2、触发器
(1)完成教材实验8内容3(注:rollback表示回滚,表示取消刚刚进行的操作);
验证触发器:分别执行
INSERT INTO StuCourse VALUES('070208','1001',70)
INSERT INTO StuCourse VALUES('070110','2001',70)
插入是否能够成功?为什么?
语句:自己写
结果:


第一条语句插入失败的原因:在StuCourse表中插入重复键,插入失败。
第二条语句插入失败的原因:学生学号‘070110’在Student表中不存在,插入取消。
(2)教材实验8思考与练习3定义触发器Ctrig 实现约束:课程的学分不能小于2,如果小于则自动改为2。自行对触发器进行验证。
语句:自己写
结果:

这篇实验报告详细介绍了存储过程和触发器的使用。在存储过程部分,包括了无参数、带输入参数以及带输入输出参数的存储过程创建与执行。触发器部分涉及了如何验证和定义触发器,以确保数据的完整性和一致性。

5048

被折叠的 条评论
为什么被折叠?



