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、嵌套调用一旦出现问题,排错困难,而且数据容易造成不一致,后期维护不方便。

  • 相关阅读:
    React:Target container is not a DOM element
    安装完node.js,在命令行输入npm -v无反应的解决办法
    正则匹配中文字符
    设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名
    回调函数/callback
    切图 or 切片
    编写获取最终样式的函数
    【Java例题】5.2 数组转换
    【Java例题】5.1 多项式计算
    【Java例题】4.5异常处理
  • 原文地址:https://www.cnblogs.com/vuenote/p/9816022.html
Copyright © 2011-2022 走看看