CREATE 触发器

触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建多个触发器。

CREATE TRIGGER trigger_name 
ON { table | view } 
[ WITH ENCRYPTION ] 
{ 
   {
      { FOR | AFTER | INSTEAD OF }
      { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
      [ WITH APPEND ] 
      [ NOT FOR REPLICATION ] 
      AS 
      [
         { IF UPDATE ( column ) 
           [ { AND | OR } UPDATE ( column ) ] [ ...n ] 
           | IF ( COLUMNS_UPDATED(){ bitwise_operator } updated_bitmask ) 
                { comparison_operator } column_bitmask [ ...n ] 
         }
      ] 
      sql_statement [ ...n ] 
   } 
}
参数 意义
trigger_name  触发器名称
WITH ENCRYPTION 加密触发器文本
FOR 默认为 AFTER
AFTER  激发时机:指定操作成功后

不能在视图上使用 AFTER

INSTEAD OF 在触发器语句中完成指定的操作(INSERT...)
insert into 表 select * from inserted
INSERT、UPDATE、DELETE 引发触发器的操作
NOT FOR REPLICATION 复制时不引发触发器
IF UPDATE 执行条件,当修改某列时
COLUMNS_UPDATED() 二进制值,每位代表一列,当被修改时置为 1
bitwise_operator  位运算符
updated_bitmask 十进制掩码,值同 COLUMNS_UPDATED() 返回值
comparison_operator  比较运算符,= >
column_bitmask 检查的列的整型俺码

comparison_operator 运算符

取值 意义
= 检查 updated_bitmask 中指定的所有列是否都实际进行了更新
> 检查 updated_bitmask 中指定的任一列或某些列是否已更新

取消引发触发器的操作

ROLLBACK TRANSACTION

概念表

在触发器执行过程中,虚拟表 deleted 包含被删除记录。

在触发器执行过程中,虚拟表 inserted 包含被插入和更新的记录。