CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
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
Table | view
WITH ENCRYPTION
AFTER
INSTEAD OF
在表或视图上,每个INSERT、UPDATE或DELETE语句最多可以定义一个INSTEAD OF触发器。然而,可以在每个具有INSTEAD OF触发器的视图上定义视图。
INSTEAD OF触发器不能在WITH CHECK OPTION的可更新视图上定义。如果向指定了WITH CHECK OPTION选项的可更新视图添加INSTEAD OF触发器,SQL Server将产生一个错误。用户必须用ALTER VIEW删除该选项后才能定义INSTEAD OF触发器
{ [DELETE] [,] [INSERT] [,] [UPDATE] }
对于INSTEAD OF触发器,不允许在具有ON DELETE级联操作引用关系的表上使用DELETE选项。同样,也不允许在具有ON UPDATE级联操作引用关系的表上使用UPDATE选项
WITH APPEND
NOT FOR REPLICATION
AS
sql_statement
当尝试DELETE、INSERT或UPDATE操作时,Transact-SQL语句中指定的触发器操作将生效
指定触发器何时触发分为以下两种情况:
AFTER触发器在触发操作(INSERT、UPDATE或DELETE)后和处理完任何约束后触发。可通过指定AFTER或FOR关键字来请求 AFTER 触发器。因为FOR关键字与AFTER的效果相同,所以具有FOR关键字的触发器也归类为AFTER触发器。
INSTEAD OF触发器代替触发动作进行触发,并在处理约束之前触发。对于每个触发操作(UPDATE、DELETE和INSERT),每个表或视图只能有一个INSTEAD OF触发器。而一个表对于每个触发操作可以有多个AFTER触发器。
本示例实现的是,当对班级表进行删除操作时,其学生表中属于被删除班的学生信息自动删除。
程序代码如下:
IF EXISTS (SELECT name
GO
CREATE TRIGGER Trig_Del
ON t_TClass
FOR DELETE
AS
BEGIN
END