文档详情

数据库实验八触发器及应用.doc

发布:2017-02-02约2.38千字共6页下载文档
文本预览下载声明
数据库实验八:触发器及应用 一、实验目的与要求: 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
显示全部
相似文档