Sql Server触发器的使用
发布时间:2024-01-19 15:08:39
Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同,触发器执行完成后,与该触发器相关的这两个表也被删除。
对表的操作 | Inserted逻辑表 | Deleted逻辑表 |
增加记录(insert) | 存放增加的记录 | 无 |
删除记录(delete) | 无 | 存放被删除的记录 |
修改记录(update) | 存放更新后的记录 | 存放更新前的记录 |
三、for、after、instead of触发器
after:触发器在触发它们的语句完成后执行。如果该语句因错误而失败,触发器将不会执行。不能为视图指定after触发器,只能为表指定该触发器。可以为每个触发操作(insert、update、delete)指定多个after触发器。如果表有多个after触发器,可使用sp_settriggerorder定义哪个after触发器最先激发,哪个最后激发。除第一个和最后一个触发器外,所有其他的after触发器的激发顺序不确定,并且无法控制。
for:等同于after
instead of:该触发器代替触发操作执行。可在表和视图上指定instead of触发器。只能为每个触发操作(insert、update、delete)定义一个instead of触发器。instead of触发器可用于对insert和update语句中提供的数据值执行增强的完整性检查。
四、 触发器的使用
1、创建触发器:
create trigger trigger_name
on {table_name | view_name}
{for| After | Instead of }
[ insert, update,delete ]
as
sql_statement
2、删除触发器:
drop trigger trigger_name
3、查看数据库中已有的触发器:
select * from sysobjects where xtype='TR'
4、查看单个触发器:
exec sp_helptext '触发器名'
5、修改触发器:
alter trigger trigger_name
on {table_name | view_name}
{for| After | Instead of }
[ insert, update,delete ]
as
sql_statement
五、触发器的实例
1、在Orders表中建立触发器,当向Orders表中插入一条记录时,检查goods表的货品状态status是否为1。是,则不能往Orders表加入该订单。
if (object_id('tgr_orders_insert', 'tr') is not null)
drop trigger [tgr_orders_insert];
go
create trigger [tgr_orders_insert]
on [orders]
after insert
as
if (select [status] from [goods],[inserted] where [goods].name=[inserted].name)=1
begin
print 'the goods is being processed'
print 'the order cannot be committed'
rollback transaction --回滚﹐避免加入
end
猜你喜欢
- 1、函数介绍REGEXP_LIKE 函数在功能上与 LIKE 函数非常相似。 然而,虽然 LIKE 允许简单的字符串匹配搜索,但 REGEX
- 下面就来介绍一下这些在后台辛勤工作的进程们。系统检测器(System Monitor,SMON)、进程监视器(Process Monitor
- Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator
- 本文实例为大家分享了Python Web框架Tornado运行和部署的详细内容,供大家参考,具体内容如下一、运行和部署因为Tornado内置
- 目录【Python压缩文件夹】导入“zipfile”模块【python压缩文件】导入“zipfile”模块补充zipfile是python里
- 本文实例讲述了python循环监控远程端口的方法。分享给大家供大家参考。具体如下:在ip.txt中每行一个ip地址和端口号,代码可循环监控这
- 一、.NET Framework Data Provider for SQL Server类型:.NET Framework类库使用:Sys
- 前言 相信很多时候大家都会用到虚拟环境,他具有可以让你快速切换不同的python版本,
- 一般TensorFlow中扩展维度可以使用tf.expand_dims()。近来发现另一种可以直接运用取数据操作符[]就能扩展维度的方法。用
- 本文实例讲述了Python Web框架之Django框架Form组件用法。分享给大家供大家参考,具体如下:Form简介在HTTP中,表单(f
- 目标最近实验室里成立了一个计算机兴趣小组倡议大家多把自己解决问题的经验记录并分享就像在CSDN写博客一样虽然刚刚起步但考虑到后面此类经验记录
- 前言今天我看到线性规划模型开头的介绍,特别不错,因此,我把它记录下来了,分享给大家在工程技术、经济管理、科学研究、军事作战训练及日常生活等众
- 前言我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循
- 本文介绍了python selenium UI自动化解决验证码的4种方法,分享给大家,具体如下:测试环境windows7+firefox50
- 1.TensorBoard神经网络可视化工具TensorBoard是一个强大的可视化工具,在pytorch中有两种调用方法:1.from t
- 利用tcpdump对mysql进行抓包操作如下所示:命令如下:tcpdump -s 0 -l -w - dst 192.168.244.10
- 本文实例讲述了javascript设计模式 – 简单工厂模式。分享给大家供大家参考,具体如下:介绍:简单工厂模式是最常用的一类创建型设计模式
- 一、用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行:#python >>>f=open('f
- 当我们开始精通编程语言时,我们不仅希望实现最终目标,而且希望使我们的程序高效。在这个教程中,我们将学习一些Ipython的命令,这些命令可以
- 一、python魔法方法Python的魔法方法会在特定的情况下自动调用,且他们的方法名通常被双下划线包裹,之前我们学习的构造函数和析构函数就