zoukankan      html  css  js  c++  java
  • SQLServer之创建嵌套触发器

    嵌套触发器创建规则

    当触发器执行启动其他触发器的操作时,DML 和 DDL 触发器都是嵌套触发器。 这些操作都可以启动其他触发器等。 DML 触发器和 DDL 触发器最多可以嵌套 32 层。 可以通过 nested triggers 服务器配置选项来控制是否可以嵌套 AFTER 触发器。 但不管此设置是什么,都可以嵌套 INSTEAD OF 触发器(只有 DML 触发器可以为 INSTEAD OF 触发器)。

    Transact-SQL 触发器中对托管代码的任何引用均计为 32 层嵌套限制中的一层。 从托管代码内部调用的方法不根据此限制进行计数。

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

    嵌套触发器创建

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

    --声明数据库引用
    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

    示例结果:

    嵌套触发器优缺点

    优点:

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

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

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

    缺点:

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

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

  • 相关阅读:
    URL中传参带有%2F等特殊字符
    js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理
    windows传输文件到linux
    npm 切换源
    linux下安装java
    PowerShell:因为在此系统上禁止运行脚本,解决方法
    wget: 未找到命令
    发货通知单禁止手工新增
    固定提前期
    容差码
  • 原文地址:https://www.cnblogs.com/vuenote/p/9816022.html
Copyright © 2011-2022 走看看