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>

 

posted @ 2014-03-08 15:16  忧忧夏天  阅读(1411)  评论(0编辑  收藏  举报