一、实验目的
1.巩固触发器和常用的SQL语句(insert、update、delete,select)
2.理解触发器临时表inserted和deleted
3. 掌握after触发器和instead of 触发器的区别
二、实验内容
(1)创建一个after触发器,当表中数据有变化时,输出提示信息
(2)创建一个instead of 触发器,提示表中数据不能修改
3)创建触发器:当在Student表中增加学生时
要求stucou表中的选课记录也发生相应的变化
(自动为学生添加三门必修课――自己指定,score为null)
(4)创建触发器:当向stucou表插入数据时,对score进行判断,要求score在0到100之间,或者为null.
三、实验步骤
(1)创建一个after触发器,当表中数据有变化时,输出提示信息
create trigger tri_after
on Class
after insert,delete,update
as
print'数据change.......'
insert Class values('20000025','02','网构')
(2)创建一个instead of 触发器,提示表中数据不能修改
createtriggertri_instead
onClass
insteadofinsert,delete,update
as
print'数据不能change.......'
deletefromClasswhereClassNO='20000025'
updateClasssetClassName='10网构'
whereClassNo='20000025'
(3)创建触发器:当在Student表中增加学生时
要求stucou表中的选课记录也发生相应的变化(自动为学生添加三门必修课――自己指定,score为null)
createtriggerstu_tri
onStudent
forinsert,update
as
declare@stunochar (8)
updateStuCou
set@stuno=(selectStunofrominserted)
insertStuCou(StuNo,CouNo)
values(@stuno,'001'),(@stuno,'010'),(@stuno,'018')
insertstudent
values ('00000100','20000002','qcl','xiao')
insertstudent
values ('00000101','20000001','cailong','chen')
insertstudent
values ('00000102','20000003','丘财龙','QCLPWD')
select*fromStudent
whereStuNo='00000100'orStuNo='00000101'orStuNo='00000102'
select*fromStuCou
whereStuNo='00000100'orStuNo='00000101'orStuNo='00000102'
(4)创建触发器:当向stucou表插入数据时,对score进行判断,要求score在0到100之间,或者为null.
createtriggerscore_tri
onstucou
forinsert
as
declare@scoreint
select@score=scorefrominserted
if@scoreisnotnull
begin
if (@score<=0 or@score>=100 )
begin
rollback
raiserror('score值必须在到之间!',0,100)
end
end
go
insertStuCou(stuno,couno,score)values('00000100','001','60')
insertStuCou(stuno,couno,score)values('00000101','010','55')
insertStuCou(stuno,couno,score)values('00000102','018','90')
select*fromStuCou
whereStuNo='00000100'orStuNo='00000101'orStuNo='00000102'
验证
四、实验总结(结果分析和体会)
对于触发器的知识比较薄弱,需多加练习