SQLServer触发器的使用

SQLServer为每个触发器创建两个私有表:插入表和删除表。这两个表由系统保存,它存在于内存中而不是数据库中。这两个表的结构总是与触发器触发的表结构相同。在执行触发器之后,删除与触发器相关的两个表。






桌子的操作

插入逻辑表

Deleted logic table


增加记录(插入)

增加记录

没有什么


删除记录(删除)

没有什么

存储已删除的记录


修改记录(更新)

存储更新记录

在更新之前存储记录



三,代替后触发器

后:触发语句之后触发完成后执行。如果因为错误的语句失败,触发将不会被执行,触发后不能为视图指定,只有触发是指定的表格,您可以指定多个触发器,每个触发器后操作(插入,更新,删除)。如果有多个后触发器表中,sp_settriggerorder可以用来定义后,触发第一激发,这是最后的激励。除了第一个和最后一个触发器,在触发器的所有其他有不确定和不可控的激励序列。

为:相当于

而不是:该触发器执行触发器操作代替,而不是触发器可以在表和视图指定。而不是触发器只能定义为每个触发操作(插入,更新,删除),而不是触发器可用于执行在INSERT和UPDATE语句提供的数据值提高完整性检查。

四。触发器的使用

1。创建触发器:

创建触发器trigger_name

在table_name view_name | { }

{为|后代替| }

{插入、更新、删除}

作为

sql_statement

2,删除触发器:

删除触发器trigger_name

三.查看数据库中已有的触发器:

SELECT * FROM sysobjects xtype = TR的地方

4。看一个触发器:

执行sp_helptext '触发器名称

5。修改触发器:

改变触发trigger_name

在table_name view_name | { }

{为|后代替| }

{插入、更新、删除}

作为

sql_statement

五,触发器的一个例子

1。在命令表中创建触发器。当一个记录被插入到订单表,检查表的商品货物状态为1。是的,订单不能被添加到订单表。如果(object_id('tgr_orders_insert,TR的)不为空)
删除触发器tgr_orders_insert } {;

创建触发器tgr_orders_insert } {
关于{订单}
插入后
作为
如果(从{ } }中选择{状态},{ { },{ { } },在这里{ { } }。name = 1)=
开始
print'the商品正在处理中
print'the秩序不能犯的
回滚事务——回滚以避免连接


终点