但不管此设置是什么,都可以嵌套 INSTEAD OF 触发器(只有 DML 触发器可以为 INSTEAD OF 触发器)。

从托管代码内部调用的方法不根据此限制进行计数。

如果允许使用嵌套触发器,且链中的一个触发器启动了一个无限循环,则将超出嵌套层限制,且触发器将终止。

嵌套触发器创建

示例:本示例演示插入数据时插入触发器触发另一个插入触发器动态的创建一个表进行备份。

--声明数据库引用
use testss;
go

--判断是否存在嵌套触发器,如果存在则删除
if exists(select * from sys.triggers where name='nestingtri')
drop trigger nestingtri;
go

--创建触发器
create
trigger
nestingtri
on
test1
for
insert
as
begin
--如果存在临时表,则先删除
if exists(select * from sys.tables where name='test4')
begin
drop table test4;
end
--如果有插入的数据,则执行创建表并插入数据
if (select count(1) from inserted) = 1
begin
print('插入触发器触发了嵌套触发器!');
select * into test4 from test1;
end
end

示例结果:

SQLServer之创建嵌套触发器

嵌套触发器优缺点

优点:

1、可以实现更加复杂的业务规则。

2、触发器可以调用一个或多个存储过程。

3、触发器最多可以嵌套32层。

缺点:

1、如果不知道存在嵌套触发器,对数据的定义或者修改会造成级联操作。

2、嵌套调用一旦出现问题,排错困难,而且数据容易造成不一致,后期维护不方便。

 

相关文章: