SQL Server 创建update、delete触发器实例

这学期刚刚学数据库,上课的时候老师主要讲的是理论。但是上机时需要实操写SQL语句,便觉得十分困难。数据库小白在大量的文章中搜索,发现许多文章对于小白来说非常不友好(maybe是笔者道行还不深),花了一下午的时间摸索,终于成功实现了SQL Sever触发器的使用 。在这里记录一下两个关于创建update触发器和一个关于创建delete触发器的案例,供今后复习,也希望能给需要的人一些帮助。

一、实现两个表的更新

题目要求:当用户更新“Student”表中的学生学号时,保证 SC表中的记录同步更新。

1.创建update触发器

if (object_id('SCtb') is not null) --判断是否存在触发器,如果存在则删除(防止重复定义)
    drop trigger SCtb
go

create trigger SCtb
on Student  --在Student表中创建触发器
for update  --创建的是update触发器
as 
	declare @sno char(20);   --定义变量sno,用于存放Studnet表更新后的数据
	select @sno=Sno from inserted;  --inserted表中存放的是更新后的数据,
                                    --将inserted存放的更新后的Sno赋给@sno
    declare @osno char(20);  --定义变量osno,用于存放Studnet表更新后的数据
	select @osno=Sno from deleted;  --deleted表中存放的是更新前的数据,
                                    --将ideleted存放的更新前的Sno赋给@osno
	if update(Sno)  --如果Studnet.Sno更新,触发器启动
		begin
			update SC set SC.Sno=@sno from inserted 
			where SC.Sno=@osno  --条件为SC.Sno=Student更新前的Sno
		end
go

2.更新Student表中学号

update Student
set Sno=200215136
where Sname='刘联';

3.结果

左(Student),右(SC),起初刘联的学号为200215135,更改后Student和SC表中实现同步更新

ps:如果遇到报错

UPDATE 语句与 REFERENCE 约束"FK__SC__Sno__300424B4"冲突,可能是由于外键约束导致,在外键属性中修改更新规则即可。

二、当用户更新表,提示用户不能修改

题目要求:当用户更新“Course”表中的课程名时,提示用户不能修改课程名称。

1.创建update触发器

if (object_id('Courseno') is not null) --判断是否存在触发器,如果存在则删除(防止重复定义)
    drop trigger Courseno
go
create trigger Courseno
on Course
for update
as 
	if update(Cname)
		begin
			print('这个不能改哦');
			rollback transaction;--数据回滚到期初状态
		end
go

2.发出修改请求

update Course
set Cname='英语'
where Cno=2;

3.结果

提示不可修改

三.创建删除触发器

题目要求:当用户删除“Student”表中的某条记录时,同时删除SC表中该学生的课程信息。

1.创建delete触发器

if (object_id('SCsc') is not null) --判断是否存在触发器,如果存在则删除(防止重复定义)
    drop trigger SCsc
go
create trigger SCsc
on Student
after delete  --触发器发生在Student操作之后
as
	begin
	delete from SC where SC.Sno in(select Sno from deleted)  --触发器发生内容是删除SC.Sno
                                                             --为Student表中删除的学号
	end
go

2.删除操作

delete from Student where Sname='章若楠';

3.结果

左(Student),右(Course),起初有章若楠同学信息,在Student表中删除后和SC表也删除掉她的课程信息

  • 16
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SQL Server触发器是一种与表事件相关的特殊存储过程,用于保证数据完整性和实施业务规则。触发器是在对表进行操作(插入,删除,更新)时自动激活执行的。触发器可以用于实现检查约束、维护冗余数据、维护外键列数据等功能。触发器创建、删除和修改的语法。创建触发器的语法是"create trigger trigger_name on {table_name | view_name} for | after | instead of delete | insert | update as sql_statement",删除触发器的语法是"drop trigger trigger_name",修改触发器的语法是"alter trigger trigger_name on {table_name | view_name} for | after | instead of delete | insert | update as sql_statement"。登录触发器是一种特殊类型的触发器,它会在与SQL Server实例建立用户会话时触发。登录触发器在用户身份验证完成后,但用户会话实际建立之前激发。登录触发器可以用于在登录事件发生时执行存储过程并记录相关信息。123 #### 引用[.reference_title] - *1* *3* [SQL Server触发器(附有实例)](https://blog.csdn.net/weixin_45763353/article/details/116852556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [sql server中的触发器](https://blog.csdn.net/guokeeiron/article/details/129970903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值