递归触发器

 
触发器有两种不同的递归方式,直接递归和间接递归。
 
直接递归
        当触发器被激活并执行一个操作时,该操作又使用同一个触发器再次执行操作,被称为直接递归。 例利用触发器的直接递归,当在表中删除一条记录时,通过触发器删除表中所有编号相同的记录。
 
间接递归
        更改表1中的数据时,触发器被激活并执行一个操作,而该操作又使另一个表2中的某个触发器被激活。表2中的这个触发器使表1得到更新,从而再次激活表1中的触发器,被称为间接递归。 例如,一应用程序更新了表TA,并引发触发器Trigger_A。Trigger_A更新表TB,从而使触发器Trigger_B被引发。Trigger_B转而更新表TA,从而使Trigger_A再次被引发间接递归。 可以利用系统存储过程sp_dboption关闭直接递归,但这又会开启间接递归。
 
 

尽管递归触发器比较复杂而且难于管理,不过他使用起来非常方便。本文中,我们将简单描述有关递归触发器之内容,并提供了一些实用的技巧。

递归触发器能够在原始列表中或在其他列表中激发其他的触发器。这两种类型之触发器递归分为直接之或间接的递归。

当一个触发器本身起作用时,一个直接的递归就生成。当一个触发器以其他列表作用时,一个间接的递归就生成了。

当使用递归触发器时请记住的内容:触发器递归局限于32位。如果一个触发器以无限循环或超过32位,触发器就会终止数据交换并停留在开始处。

超过32位之触发器是个无实际意义的触发器。这样应该考虑被控制的逻辑循环或其他程式终止检查,这对递归触发器的保护是非常有作用的。 

如果一个触发器操作ROLLBACK TRANSACTION,将不会执行其他的触发器。

严格的检测递归触发器。未经检测的递归触发器将对数据操作带来非常大的危害。

不能控制触发器初始更改的地方。所以你的列表必须以一个特定之方式来更新,你不能使用递归触发器。你只能设置第一个和最后一个触发器。

若要把这两种类型的递归都禁止,需要使用系统存储过程sp_configure。

间接递归在缺省情况下为ON。如果想把他变为OFF,必须使用sp_configure来设置嵌套触发器选择。

直接递归在缺省情况下是OFF。能通过使用ALTER DATABASE声明把他变为ON。以下范例将直接递归变成dbName数据库。

USE master

GO

ALTER DATABASE dbName

SET RECURSIVE_TRIGGERS ON

GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值