数据库实验八触发器及应用.doc
文本预览下载声明
数据库实验八:触发器及应用
一、实验目的与要求:
1.实验目的
(1)学习触发器的使用,加深对触发器功能和作用的理解。
(2)体会触发器执行的时机。
2.实验要求
建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值):
(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
(2)为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
(3)自行再分别设计2~3个触发器(在实验报告中要准确描述功能需求)。
(4)设计并执行相关的操作,体会DML触发器的效果和作用。
二、实验内容
1、实验原理 …]]
sql-statement
2、实验
(1)调出SQL Server2005软件的用户界面,进入SQL SERVER MANAGEMENT STUDIO。
(2)输入自己编好的程序。
(3)检查已输入的程序正确与否。
(4)运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同的数据时所得到的结果是否正确。
(5)输出程序清单和运行结果。
(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
插入触发器:
create trigger xk_trigger
on 选课
for insert
as
declare @amount int, @xh char(10)
select @xh=学号 from inserted
if @xh is not null
begin
select @amount=(select count(*)from 选课 where 成绩60 and 学号=@xh)
if @amount=5
begin
raiserror(不及格达到门,16,10)
end
end
insert into 选课 values(001,03,50)
insert into 选课 values(001,02,50)
insert into 选课 values(001,04,50)
create trigger xk_trigger2
on 选课
for update
as
declare @amount int, @xh char(10)
select @xh=学号 from inserted
if @xh is not null
begin
select @amount=(select count(*)from 选课 where 成绩60 and 学号=@xh)
if @amount=5
begin
raiserror(不及格达到门,16,10)
end
end
update 选课 set 成绩=50 where 学号=001 and 课程编号=02
update 选课 set 成绩=50 where 学号=001 and 课程编号=03
update 选课 set 成绩=50 where 学号=001 and 课程编号=04
update 选课 set 成绩=50 where 学号=001 and 课程编号=05
update 选课 set 成绩=50 where 学号=001 and 课程编号=06
create trigger kc_trigger3
on 课程
for insert
as
declare @zc char(10),@zrjs char(10),@kcbh char(10),@kcxz char(10)
select @kcbh=课程编号,@zrjs=责任教师 from inserted
if @kcbh is not null
begin
select @kcxz=课程性质 from 课程
select @zc=职称 from 教师 where 教师编号 in
(select 责任教师 from 课程 where 课程性质=专业基础)
if @zc!=教授 or @zc!=副教授
begin
raiserror(该专业基础课的教师不是教师或副教授!,15,10)
rollback transaction
end
End
insert into 课程 values(09,TCP协议,2,8,专业基础)
create trigger kc_trigger4
on 课程
for update
as
declare @zc char(10),@zrjs char(10),@kcbh char(10),@kcxz char(10)
select @kcbh=课程编号,@zrjs=责任教师 from inserted
if @kcbh is not null
beg
显示全部