• MSSQL触发器


    1.触发器语法

      CREATE TRIGGER<trigger name>

        ON [<模式名>.]<表名或视图名>

        [WITH ENCRYPTION]

        {{{FOR|AFTER} <[DELETE] [,] [INSERT] [,] [UPDATE] >} | INSTED OF}

        [WITH APPEND]

      AS

        <SQL语句>

    2.DML触发器类型

      参考:msdn

      1)AFTER 触发器:在执行 INSERT、UPDATE、MERGE 或 DELETE 语句的操作之后执行 AFTER 触发器。 如果违反了约束,则永远不会执行 AFTER 触发器;

      2)INSTEAD OF 触发器:插入、更新或删除行之前执行;

      比较:

    功能                   

    AFTER触发器

    INSTEAD OF触发器

    适用范围

    表和视图

    每个表或视图包含触发器的数量

    每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器

    每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器

    级联引用

    无任何限制条件

    不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。

    执行

    晚于:

    约束处理

    声明性引用操作

    创建插入的和删除的表

    触发操作

    早于:

    约束处理

    替代:

    触发操作

    晚于:

    创建插入的和删除的表

    执行顺序

    可指定第一个和最后一个执行

    不适用

    插入的和删除的表中的varchar(max)、nvarchar(max) 和 varbinary(max)列引用。

    允许

    允许

    插入的和删除的表中的 text、ntext 和 image 列引用。

    不允许

    允许

    3.插入表(instered表)和删除表(deleted表)

    对表的操作

    Inserted逻辑表

    Deleted逻辑表

    增加记录(insert)

    存放增加的记录

    删除记录(delete)

    存放被删除的记录

    修改记录(update)

    存放更新后的记录

    存放更新前的记录

    4.IF UPDATE()与COLUMNS_UPDATED()

      前一个用于判断是否更新了某列提供一个布尔判断;后一个提供以此检查多列能力。

    5.禁用启用触发器

      ALTER TABLE <table name> <ENABLE|DISABLE> TRIGGER <ALL|trigger name>

  • 相关阅读:
    linux下的第一个C程序及其编译方法
    使用open_read_write等底层函数来赋值一个文件
    C++中预定义的宏
    altibase MDB的创建sequence的举例
    C中的时间函数的用法
    联系表单 1
    《jQuery基础教程》读书笔记
    《jQuery基础教程》读书笔记
    《jQuery基础教程》读书笔记
    『原创·翻译』如何阅读论文
  • 原文地址:https://www.cnblogs.com/xqhppt/p/3587954.html
Copyright © 2020-2023  润新知