我是靠谱客的博主 健康滑板,这篇文章主要介绍SQL Server 创建update、delete触发器实例ps:如果遇到报错,现在分享给大家,希望可以做个参考。

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

一、实现两个表的更新

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

1.创建update触发器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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表中学号

复制代码
1
2
3
update Student set Sno=200215136 where Sname='刘联';

3.结果

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

ps:如果遇到报错

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

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

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

1.创建update触发器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.发出修改请求

复制代码
1
2
3
update Course set Cname='英语' where Cno=2;

3.结果

提示不可修改

三.创建删除触发器

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

1.创建delete触发器

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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.删除操作

复制代码
1
delete from Student where Sname='章若楠';

3.结果

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

最后

以上就是健康滑板最近收集整理的关于SQL Server 创建update、delete触发器实例ps:如果遇到报错的全部内容,更多相关SQL内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部