SQL Server 创建update、delete触发器实例
这学期刚刚学数据库,上课的时候老师主要讲的是理论。但是上机时需要实操写SQL语句,便觉得十分困难。数据库小白在大量的文章中搜索,发现许多文章对于小白来说非常不友好(maybe是笔者道行还不深),花了一下午的时间摸索,终于成功实现了SQL Sever触发器的使用 。在这里记录一下两个关于创建update触发器和一个关于创建delete触发器的案例,供今后复习,也希望能给需要的人一些帮助。
一、实现两个表的更新
题目要求:当用户更新“Student”表中的学生学号时,保证 SC表中的记录同步更新。
1.创建update触发器
if (object_id('SCtb') is not null) --判断是否存在触发器,如果存在则删除(防止重复定义)drop trigger SCtb
gocreate trigger SCtb
on Student --在Student表中创建触发器
for update --创建的是update触发器
as declare @sno char(20); --定义变量sno,用于存放Studnet表更新后的数据select @sno=Sno from inserted; --inserted表中存放的是更新后的数据,--将inserted存放的更新后的Sno赋给@snodeclare @osno char(20); --定义变量osno,用于存放Studnet表更新后的数据select @osno=Sno from deleted; --deleted表中存放的是更新前的数据,--将ideleted存放的更新前的Sno赋给@osnoif update(Sno) --如果Studnet.Sno更新,触发器启动beginupdate SC set SC.Sno=@sno from inserted where SC.Sno=@osno --条件为SC.Sno=Student更新前的Snoend
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)beginprint('这个不能改哦');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操作之后
asbegindelete 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表也删除掉她的课程信息
SQL Server 创建update、delete触发器实例相关推荐
- 为SQL Server创建基于“智能”触发器的审核跟踪
介绍 (Introduction) Audit tables are used to track transactions for a particular table or tables. For ...
- SQL Server 2016 JSON原生支持实例说明
原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...
- SQL Server中的登录触发器概述
This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...
- aws rds监控慢sql_AWS RDS SQL Server –启动新的数据库实例
aws rds监控慢sql This article will review on how to launch an AWS RDS SQL Server instance and how to co ...
- SQL SERVER 创建GHUID命令:select newid();
SQL SERVER 创建GHUID命令:select newid(); insert into persion2(id,name,age) values(newid(),'j',23); 插入有中文 ...
- SQL Server服务器名称与默认实例名不一致的修复方法
SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql ser ...
- SQL server management 查询所有触发器
SQL server management 查询所有触发器 SQL server management 查询所有触发器 SELECT OBJECT_NAME(a.parent_obj) AS [表名] ...
- SQL Server创建数据库和数据的增删改查
SQL Server创建数据库和数据的增删改查 本文是针对数据的增删改查,数据的创建 首先我们使用命令创建sql server数据库 D盘新建一个文件夹DB use master go --创建数据库 ...
- SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两 ...
最新文章
- 七牛云中带前缀的路径斜杆是怎么写的_关于小程序上传图片到七牛的总结
- 关于Linux系统指令 top 之 %si 占用高,分析实例一
- Nginx使用教程(五):使用Nginx缓存之缓存静态内容
- Memcache 安装与命令 (windows 64bit)
- WebBrowser内存泄露
- 步步理解 JAVA 泛型编程 – 共三篇
- 【洛谷P1632】点的移动
- 判断数组是否有重复值
- 全部博文集锦第三期CHM文件,及十三个经典算法研究PDF文档
- Delphi TreeView失去焦点也选中
- iOS开发拓展篇—UIDynamic(捕捉行为)
- 安装sphinx的心得和错误处理
- 8.Kubernetes Service(服务)
- 大学四年Java学习路线规划,所有私藏资料我都贡献出来了,我要是早知道就好了
- PC 先驱克拉克逝世 曾参与开发首款晶体管 PC
- 软件环境 硬件环境java,软件环境和硬件环境都指什么?
- 【考试总结贴】控制测量学
- ​Spring Cloud:统一异常处理
- iOS使用CNContact对通讯录增删改查
- AcWing 2041. 干草堆