您的位置:首页 > 数据库

MSSQL触发器

2014-03-08 15:16 169 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: