sql数据库游标触发器实验结果
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验成绩
《数据库系统原理及应用》
实
验
报
告
(七)
专业班级: 软件1101班
学号: 201116040128
姓名: 韩盼盼
指导教师: 苏小玲
2013 年10 月14 日
实验七名称:SQL Server触发器和游标
一、实验内容及要求
1.创建满足下述要求的DML触发器(前触发器和后触发器均可),并验证触发器执行情况。
任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。
任务2:限制每个学期所开设的课程总学分在20~30范围内。
任务3:限制每个学生每学期选课门数不能超过6门(设只针对单行插入操作)
任务4:限制不能删除有人选的课程
2.创建满足下述要求的游标
任务1:查询java课程的考试情况,并按教材11-19所示样式显示结果数据。
任务2:统计每个系的男生人数和女生人数,并按教材11-20所示样式显示结果数据。
任务3:列出每个系的学生信息,要求首先列出一个系的系名,然后在该系名下列出本系学生的姓名和性别,以此类推,直至列出全部系。要求按教材11-21所示样式显示结果数据。
二、实验目的
掌握触发器的概念;掌握触发器创建方法;掌握游标的概念;掌握游标的使用方法。
三.实验步骤及运行结果
1.创建满足下述要求的DML触发器(前触发器和后触发器均可),并验证触发器执行情况。
任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。
create trigger tri_Insertsdept on Student after insert as if exists(select*from inserted i where i.Sdept!='计算机系'and i.Sdept!='信息管理系'and i.Sdept!='数学系'and i.Sdept!='通信工程系')
Begin print'你所插入的学生的系被限制!'rollback end go
insert into student values (080000,'童彤','女','1990-05-01','服装设计','服装设计系')
insert into student values(080000,'顾城北','男','1990-06-01','高级编程','计算机系')
任务2:限制每个学期所开设的课程总学分在20~30范围内。
create trigger tri_Insertcredit on Course after insert as if (select sum(c.Credit)from Course c join inserted i on i.Smester=c.Smester)not between20 and30 begin print'你所插入的课程所在学期的总学分不在~30这个范围内' rollback end go
insert into Course values ('C012','影视鉴赏',25,1)
insert into Course values ('C013','服装设计',16,1)
任务3:限制每个学生每学期选课门数不能超过6门(设只针对单行插入操作)
create trigger tri_totalcno on SC after insert as declare@sno char(9)
select@sno=inserted.Sno from inserted
if exists(select count(*)from SC join Course c on o=o where SC.Sno=@sno group by Smester having count(*)>2) begin print'你所插入的学生选课门数超过门!' Rollback end go
insert into SC values(821102,'c006',88)
insert into SC values(811101,'c006',86)
任务4:限制不能删除有人选的课程
create trigger tri_deletcno on Course after delete as
if exists(select*from Course c join deleted d on o=o join SC on o=o)
Begin print'你所删除的学生存在选课!' rollback end go
delete from Course where Cno='c001'
delete from Course where Cno='c013'
2.创建满足下述要求的游标
任务1:查询java课程的考试情况,并按教材11-19所示样式显示结果数据。
declare@name nchar(5),@sdept nvarchar(20),@grade int
print'选了java课程的学生情况:'
print'姓名所在系成绩'
declare java_cursor cursor for
select Sname,Sdept,Grade from Student s join SC on s.Sno=SC.Sno join Course c on o=o where Cname='java' open java_cursor
fetch next from java_cursor into@name,@sdept,@grade
while@@FETCH_STATUS=0 begin
print@name+' '+@sdept+' '+cast(@grade as char(4))
fetch next from java_cursor into@name,@sdept,@grade
End close java_cursor deallocate java_cursor