请问触发器能否被递归调用吗

本文讨论了SQL Server中触发器的递归问题,包括直接递归和间接递归,并介绍了如何通过nested triggers选项以及update函数、@@NESTLEVEL和@@PROCID等方法来控制和防止触发器的递归调用。同时,解释了启用或禁用recursive triggers和nested triggers选项对触发器递归的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




A表UPDATE后,取B表某列再次UPDATE   A表,这样又触发了A表的   UPDATE     触发器,我的目的是只触发一次,
是否设置   nested   triggers   选项关闭递归触发器即可?

分析
首先,必须清楚触发器递归的定义,触发器有两种递归方式:
1.           直接递归
A表上的触发器更改(插入/删除/更新)A表数据,导致A表的触发器再次触发,这种状况称之为直接递归;
2.           间接递归
A表上的触发器更新B表数据,导致触发B表触发器;而B表触发器又更改A表数据,导致A表触发器再次触发,这种状况称之为间接递归

解决方法—选项配置(影响所有范围的触发器)
SQL   Server提供了数据库级和服务器级配置来确定递归触发器是否被允许:
1.               服务器级(使用存储过程sp_configure   进行配置)
server   trigger   recursion   选项(SQL   Server   2005)决定是否允许服务器级触发器直接递归激发;当此选项设置为1   (ON,默认值)时,将允许服务器级触发器递归激发;当设置为0   (OFF)   时,服务器级触发器不能递归激发。
nested   triggers选项决定是否允许触发器间接递归激发;当此选项设置为1   (ON,默认值)时,将允许触发器递归激发;当设置为0   (OFF)   时,触发器不能递归激
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值