我是靠谱客的博主 微笑刺猬,最近开发中收集的这篇文章主要介绍SQL Server学习笔记——触发器SQL Server学习笔记——触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

SQL Server学习笔记——触发器

触发器主要用于监视某种活动,并触发某种操作,当对一个表格进行增删改就有可能自动激活并执行它。
触发器定义语句:

create trigger t_name on table_name
after --或 instead of,分别表示之后或之前
update --或 insert,delete,分别表示对表的具体操作
as
begin
	--代码段
end

具体地,若要定义一个在stu表插入操作之后的一个触发器,则可以写为:

create trigger t1 on stu after insert
as
begin
	--代码段
end

1. 学生人数不能大于17
① 执行插入操作之后激活触发器:
当前stu表中学生人数为16,执行插入操作后,若表中人数大于17则输出错误信息,并撤销插入操作:

create trigger t1 on stu after insert
as
begin
	if (select COUNT(*) from stu) > 17
	begin
		print 'error'
		rollback tran --撤销上一步的插入操作
	end
	else
	begin
		print 'right'
	end
end

当我们执行一条插入语句:

insert into stu(sno, sname) values('2020018', 'kk')

插入之后stu表中学生信息为恰好为17,则输出正确信息:
在这里插入图片描述
当我们再次执行一条插入语句:

insert into stu(sno, sname) values('2020019', 'kkk')

此时,stu表中学生人数大于17,则输出错误信息:
在这里插入图片描述
② 执行插入操作之前激活触发器:
当前stu表中学生人数为16,执行插入操作之前,首先判断表中学生人数,之后决定时候进行插入:

create trigger t2 on stu instead of insert
as
begin
	if (select COUNT(*) from stu) > 16
	begin
		print 'error'
		rollback tran
	end
	else
	begin
		print 'right'
		--插入前激活触发器,触发器不自动进行插入操作,需要自己手写插入操作
		declare @sno varchar(13) --声明变量
		declare @sname varchar(30)
		select @sno = sno from inserted --
		select @sname = sname from inserted
		insert into stu(sno, sname) values(@sno, @sname)
	end
end

  • inserted 表用于存储 insertupdate 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中,inserted 表中的行是触发器表中新行的副本。
  • deleted 表用于存储 deleteupdate 语句所影响的行的复本。在执行 delete 或 update 语句时,行从触发器表中删除,并传输到 deleted 表中,deleted 表和触发器表通常没有相同的行。

2. 学生人数不能小于16

执行删除操作之后,判断stu表中学生数目,若数量小于16,则返回错误,并撤销删除操作:

create trigger t3 on stu after delete
as
begin
	if (select COUNT(*) from stu) < 16
	begin
		print 'error'
		rollback tran
	end
	else
	begin
		print 'right'
	end
end

当删除一名学生信息后,学生数量小于16时,则会激活触发器,反馈错误信息:在这里插入图片描述

3. 当新增学生成绩为55-60分时,改为60分
在插入操作之前判断即将插入成绩的大小,若成绩在55-60分,则统一改成60分。

create trigger t4 on sc instead of insert
as
begin
	declare @cno varchar(13)
	declare @sno varchar(13)
	declare @grade decimal(5, 2)
	select @cno = cno from inserted
	select @sno = sno from inserted
	select @grade = grade from inserted
	if @grade >= 55 and @grade < 60
	begin
		set @grade = 60
	end
	insert into sc values(@cno, @sno, @grade)
end

执行插入语句:

insert into sc values('20202', '20200016', 57)
insert into sc values('20201', '20200016', 85)

插入结果为:
在这里插入图片描述
可见,第一条插入语句中的成绩为57分,成功改为60分;而第二条插入语句中的分数为85分,由于不在55-60之间,则保持不变。

最后

以上就是微笑刺猬为你收集整理的SQL Server学习笔记——触发器SQL Server学习笔记——触发器的全部内容,希望文章能够帮你解决SQL Server学习笔记——触发器SQL Server学习笔记——触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部