触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。允许为任何给定的 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 | 检查的列的整型俺码 |
取值 | 意义 |
---|---|
= | 检查 updated_bitmask 中指定的所有列是否都实际进行了更新 |
> | 检查 updated_bitmask 中指定的任一列或某些列是否已更新 |
ROLLBACK TRANSACTION |
在触发器执行过程中,虚拟表 deleted 包含被删除记录。
在触发器执行过程中,虚拟表 inserted 包含被插入和更新的记录。