create trigger insert_1 on cj
for insert
as
begin
declare @sno char(10)
select @sno=inserted.sno from inserted
if not exists(select snum from student where snum=@sno)
begin
print '该学生的学号不存在'
rollback tran
end
end
--测试触发器
insert into cj values('201715031','c001',121)
--查看当前数据库的所有触发器
select * from sysobjects where xtype='TR'
--删除触发器
drop trigger insert_1
运行结果:(触发器被触发,插入命令中止)
2. 使用 insert 语句向 sc 表中插入记录(‘201715030’, ‘1’), 观察触发器 INSERT_SC 是否被执行。
create trigger insert_2 on cj
for insert
as
print 'insert_2触发器执行'
insert into cj values('201715031','c003',121)
drop trigger insert_2
3. 创建一个当学生表中插入一个新同学时能自动列出全部同学学生信息的触发器Display_trigger。
create trigger Display_trigger on student
for insert
as
begin
print '触发器Display_trigger被执行,以下为全部学生信息'
select * from student
end
--测试触发器
insert into student values('201715020','张思','女',20,'管理系')
--删除触发器
drop trigger Display_trigger
4. 在成绩表 sc 中创建一个 UPDATE 触发器 update_score,当修改成绩时,如果发现成绩小于 0,则不执行修改操作,并提示用户。使用下面的 SQL 语句试图修改 201715005’学生的成绩,观察触发器 update_score 是否被执行。
create trigger update_score on cj
for update
as
if exists(select score from inserted
where score<0)
begin
print '触发器update_score被执行'
raiserror( '学生的成绩小于',16,1)
rollback
end
update cj set score=-6 where sno='201715001'
drop trigger update_score
5. 课程表 course 中创建一个 DELETE 触发器 delete_course,如果待删除的课程在sc 表中存在对应的选课记录,则不执行删除操作,并提示用户。使用下面的 SQL 语句试图删除’1’课程信息,检查触发器 delete_course 是否被执行。
create trigger delete_course on course
for delete
as
begin
declare @cnum char(4)
select @cnum=deleted.cnum from deleted
if exists(select cno from cj where cno=@cnum)
begin
print '待删除的课程在sc 表中存在对应的选课记录,停止操作!'
rollback tran
end
end
--测试触发器
delete from course where cnum='c001'
drop trigger delete_course
alter table cj disable trigger update_score
alter table cj enable trigger update_score
drop trigger update_score