这学期刚刚学数据库,上课的时候老师主要讲的是理论。但是上机时需要实操写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触发器实例相关推荐

  1. 为SQL Server创建基于“智能”触发器的审核跟踪

    介绍 (Introduction) Audit tables are used to track transactions for a particular table or tables. For ...

  2. SQL Server 2016 JSON原生支持实例说明

    原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...

  3. SQL Server中的登录触发器概述

    This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...

  4. 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 ...

  5. SQL SERVER 创建GHUID命令:select newid();

    SQL SERVER 创建GHUID命令:select newid(); insert into persion2(id,name,age) values(newid(),'j',23); 插入有中文 ...

  6. SQL Server服务器名称与默认实例名不一致的修复方法

    SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql ser ...

  7. SQL server management 查询所有触发器

    SQL server management 查询所有触发器 SQL server management 查询所有触发器 SELECT OBJECT_NAME(a.parent_obj) AS [表名] ...

  8. SQL Server创建数据库和数据的增删改查

    SQL Server创建数据库和数据的增删改查 本文是针对数据的增删改查,数据的创建 首先我们使用命令创建sql server数据库 D盘新建一个文件夹DB use master go --创建数据库 ...

  9. SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

    SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两 ...

最新文章

  1. 七牛云中带前缀的路径斜杆是怎么写的_关于小程序上传图片到七牛的总结
  2. 关于Linux系统指令 top 之 %si 占用高,分析实例一
  3. Nginx使用教程(五):使用Nginx缓存之缓存静态内容
  4. Memcache 安装与命令 (windows 64bit)
  5. WebBrowser内存泄露
  6. 步步理解 JAVA 泛型编程 – 共三篇
  7. 【洛谷P1632】点的移动
  8. 判断数组是否有重复值
  9. 全部博文集锦第三期CHM文件,及十三个经典算法研究PDF文档
  10. Delphi TreeView失去焦点也选中
  11. iOS开发拓展篇—UIDynamic(捕捉行为)
  12. 安装sphinx的心得和错误处理
  13. 8.Kubernetes Service(服务)
  14. 大学四年Java学习路线规划,所有私藏资料我都贡献出来了,我要是早知道就好了
  15. PC 先驱克拉克逝世 曾参与开发首款晶体管 PC
  16. 软件环境 硬件环境java,软件环境和硬件环境都指什么?
  17. 【考试总结贴】控制测量学
  18. ​Spring Cloud:统一异常处理
  19. iOS使用CNContact对通讯录增删改查
  20. AcWing 2041. 干草堆

热门文章

  1. 数字图像处理第三版(冈萨雷斯)——第一章绪论
  2. Alertmanager 报警规则
  3. 互联网专家资源分享(一)
  4. FL Studio21新版终于有内置的强大混响插件了
  5. 深入浅出MySQL JSON数据类型
  6. 【公式函数】WPS 公式函数 笔记
  7. 沣东新城镐京遗址规划_沣东新城稳步推进镐京遗址保护 确保文化遗产保护成果惠及民生...
  8. javascript提取联通个人信息和通话记录的代码
  9. 象棋参谋 v1.1 免费版 官网
  10. 西南科技大学OJ题 求最小生成树(Prim算法)1075