SQL server触发器学习记录
作为C#程序员,我工作内容基本就是winform,wpf,asp.net。sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫。。。
需求描述:aspnet_Users表有三个触发器INSERT,DELETE,UPDATE,每个触发器的执行结果都是对表:aspnet_UsersAuditing 执行insert操作。结果就是aspnet_UsersAuditing的数据量增长的特别快、导致备份失败。
现在需要更改触发器的条件:
The trigger on this table should ignore updates if only LastActivityDate changed.
也就是说,当只有字段:LastActivityDate 发生变化时,不需要执行触发器。
解决过程:
下图是目前的UPDATE触发器sql。根据需求,我认为需要修改的只有UPDATE触发器,因为insert和delete并不会引起only LastActivityDate change。
看了几篇博客,对触发器的语法有了大概的了解。但是对except、deleted、intserted关键字很陌生。
EXCEPT:可以理解为B在A中的补集。或者根据单词直译,从A中减掉B。
(SELECT * FROM A{1,1,2,3}) EXCEPT (SELECT * FROM B{1,2,5})结果:3。
顺便也查了一下INTERSECT UNION
INTERSECT:交集
UNION:全集/合集
DELETED:用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
INSERTED:用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据
2.删除操作(Delete)
Inserted表无数据,Deleted表有数据
3.更新操作(Update)
Inserted表有数据(新数据),Deleted表有数据(旧数据)
经过上述学习,现在基本就能看懂这个update触发器了。接下来就是要增加一个触发条件,必须有LastActivityDate 以外的字段发生变化时,才执行触发器。
第一个想法是把LastActivityDate字段从这段sql里去掉。看起来应该是可以达到效果的,而且改动还很小。
但有一点需要注意,更新触发器需要drop原来的触发器,再create修改后的触发器。
我先去试试去。
最新文章
- monkey工具使用中遇到的问题之二:尝试了各种方法通过adb都无法找到设备
- 【BZOJ-1597】土地购买 DP + 斜率优化
- python requests
- 设置让ASP.NET管道接收所有类型的请求
- HDU4870_Rating_双号从零单排_高斯消元求期望
- 双日历插件--jq datepicker时间范围选择
- rlwrap(在sqlplus下使用上下键)
- iOS中常用的第三方
- Xcode 常用快捷键及代码自动排版
- 为大型数据文件每行只能产生id
- c# 自定义数据类型
- Go语言的数组
- mui-选项卡+scroll滚动
- vue常考面试题
- JavaWeb(一)-Servlet中的Config和Context
- 【转】Xposed出现 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
- js中的arguments用法
- git worktree 是什么及其使用场景
- 买不到的数目|2018年蓝桥杯A组题解析第八题-fishers
- 如何通过创建切片器窗格节省PowerBI报告空间
热门文章
- 微信小程序~页面跳转和路由
- CSP-S 2019提高组训练 服务器需求
- charAt,charCode,fromCharCode区别
- Incorrect integer value: '' for column 'id' at row 1 错误解决办法
- mybatis的注意事项一
- Jmeter扩展自定义函数
- BZOJ 4212: 神牛的养成计划 可持久化trie+trie
- 46、Spark SQL工作原理剖析以及性能优化
- Cocos CreatorUI系统下
- Apache2 服务配置 ubuntu16.04 + django1.11