使用T-SQL语句完成触发器的创建和管理

  1. 在 sc 表创建一个 insert 触发器,如果插入一条选课信息时,学生的学号值在表student 中不存在,则不执行插入操作,并提示用户。
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

运行结果:(触发器被触发,插入命令中止)
使用T-SQL语句完成触发器的创建和管理_第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

使用T-SQL语句完成触发器的创建和管理_第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

使用T-SQL语句完成触发器的创建和管理_第3张图片
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

使用T-SQL语句完成触发器的创建和管理_第4张图片
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

使用T-SQL语句完成触发器的创建和管理_第5张图片
6. 禁用 update_score 触发器

alter table cj disable trigger update_score
  1. 启用 update_score 触发器
alter table cj enable trigger update_score
  1. 删除 update_score 触发器
drop trigger update_score

你可能感兴趣的:(数据库)