数据库原理和应用实验报告 下载本文

内容发布更新时间 : 2025/5/23 23:23:36星期一 下面是文章的全部内容请认真阅读。

如有你有帮助,请购买下载,谢谢!

实验成绩

《数据库系统原理及应用》 实 验 报 告 七

专业班级: 计算机科学与技术 学 号: 0233

姓 名: 范晓曈 指导教师: 苏小玲

2013年 11 月 28 日

1页

如有你有帮助,请购买下载,谢谢!

实验七名称: SQL Server触发器和游标

一、实验内容及要求

(使用教材建立的student、course和sc表实现)

1、创建满足下述要求的DML触发器(前触发器和后触发器均可),并验证触发器执行情况。

任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。

任务2:限制每个学期所开设的课程总学分在20~30范围内。

任务3:限制每个学生每学期选课门数不能超过6门(设只针对单行插入操作)

任务4:限制不能删除有人选的课程 2.创建满足下述要求的游标 任务1:查询java课程的考试情况,并按教材11-19所示样式显示结果数据。 任务2:统计每个系的男生人数和女生人数,并按教材11-20所示样式显示结果数据。

任务3:列出每个系的学生信息,要求首先列出一个系的系名,然后在该系名下列出本系学生的姓名和性别,以此类推,直至列出全部系。要求按教材11-21所示样式显示结果数据。

二、实验目的

掌握触发器的概念;掌握触发器创建方法;掌握游标的概念;掌握游标的使用方法。

三、实验步骤

创建满足下述要求的DML触发器(前触发器和后触发器均可),并验证触发器执行情况。

任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。

create trigger tri_limitedept

on student after insert,update as

IF EXISTS(SELECT * FROM INSERTED

WHERE sdept!='计算机' and sdept!='信息管理系' and sdept!='数学系' and sdept!='通信') ROLLBACK

insert into student

values(001,'一','女','通信工程系','1991-01-01','JAVA','5.0')

任务2:限制每个学期所开设的课程总学分在20~30范围内。

create trigger tri_limit

on course after insert,update

2页

如有你有帮助,请购买下载,谢谢!

as

if exists(select sum(credit) from course

where semester in (select semester from inserted ) having sum(credit) not between 20 and 30 )

print'你所插入的课程所在学期的总学分不在~30这个范围内' Rollback

insert into Course

values('C007','0007','007','JAVA',3,2)

任务3:限制每个学生每学期选课门数不能超过6门(设只针对单行插入操作)

create trigger tri_count ON SC after INSERT as

if(select count(*) from sc where sno=(select sno from inserted))>4 begin

print '选课超过限额' rollback End

insert into sc

values(0231,'C005',',85,75)

任务4:限制不能删除有人选的课程

create trigger tri_Deletekc ON course AFTER DELETE AS

IF EXISTS(SELECT * FROM sc join DELETED d on sc.cno=d.cno ) BEGIN

PRINT '不能删除有学生选的课程' ROLLBACK END

delete from course where cno='C001'

2.创建满足下述要求的游标 任务1:查询java课程的考试情况,并按教材11-19所示样式显示结果数据。

declare @name varchar(200),@dept varchar(200),@sscore varchar(10) --声明存放结果

集的变量

declare java_cursor cursor for --声明游标 select s.sname,s.sdept,sc.sscore

from student s join sc on s.sno=sc.sno join course c on sc.cno=c.cno where cname='java'

open java_cursor --打开游标

fetch next from java_cursor into @name,@dept,@sscore --首先提取第一行 print '选了JAVA课程的学生的成绩:' print '姓 名 所在系 成绩 ' while @@FETCH_STATUS=0

3页