实验成绩
《数据库系统原理及应用》实验报告
实验六: SQL Server触发器
专业班级: 软件1305班 姓名:庄建伟 学号:201316920319 完成时间:15/10/30 一、实验目的
理解触发器的作用和工作机制;熟练掌握后触发器和替代触发器的区别;熟练掌握后触发器和替代触发器的创建。 二、实验内容及要求
(使用前面实验建立的student、course和sc表实现)
创建满足下述要求的DML触发器(分别用前触发器和后触发器实现),并验证触发器执行情况。
任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。
任务2:限制每个学生所选修的课程总学分在20~30范围内。
任务3:限制每个学生选课总门数不能超过6门(设只针对单行插入操作) 任务4:限制不能删除有人选的课程。 三、实验结果(含运行程序和相应执行情况截图)
任务1:限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}。 后触发器:
create trigger Zhuang_J_W on student after insert
as
declare @dept char(10)
select @dept=student.sdept from student,inserted where student.sno=inserted.sno
if @dept not in ('计算机系','信息管理系','数学系','通讯工程系') begin rollback transaction
raiserror ('不能输入其他系的学生信息!',16,10) end else
print('有新的学生信息插入到学生表中')
insert into student
values('000002','朱四','男','20','体育系')
前触发器:
create trigger sal_log on student instead of insert as
if exists (select* from inserted
where sdept in ('计算机系','信息管理系','数学系','通讯工程系')) insert into student select* from inserted
insert into student
values('000004','刘五','男','22','数学系')
任务2:限制每个学生所选修的课程总学分在20~30范围内。 后触发器:
create trigger sbase_sb on course after insert as
if not exists (select sum(ccredit) from inserted having sum(ccredit) between 20 and 30) begin rollback transaction
print('你输入的学生的总学分不符合要求') end
else print'插入新的学生信息'
前触发器:
use stu
create trigger s_boy on course instead of insert as
if not exists (select sum(ccredit) from inserted
having sum(ccredit) not between 20 and 30 ) insert into course select * from inserted
任务3:限制每个学生选课总门数不能超过6门(设只针对单行插入操作) 后触发器:create trigger ste_al on sc after insert
as
if (select count(*) from sc
join inserted on inserted.sno=sc.sno)>6 begin
print'你选的课程过多' rollback end
前触发器:
create trigger stable_als on sc instead of insert as
if (select count(*) from sc