触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。允许为任何给定的 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 包含被插入和更新的记录。