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

  • 相关阅读:
    团队项目启动及成员分工
    图书馆 管理系统--可行性报告
    KING小组
    什么是F#
    都删了,走了
    机器学习-决策树
    深度学习--说一说卷积和池化
    机器学习--逻辑回归_LR(内附细说极大似然估计,梯度下降法)
    Dlib安装(Mac版)
    动态语言、静态语言及动态语言的“鸭子类型“
  • 原文地址:https://www.cnblogs.com/vuenote/p/9816022.html
Copyright © 2011-2022 走看看