admin 管理员组文章数量: 1086019
2024年3月20日发(作者:凯撒密码翻译器在线)
SQL触发器语法
语法
CREATE TRIGGER trigger_name (触发器的名称)
ON { table | view } (在其上执行触发器的表或视图)
[ WITH ENCRYPTION ] (加密)
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ DELETE ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) updated_bitmask )
column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
参数
trigger_name
是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一。
可以选择是否指定触发器所有者名称。
Table | view
是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是
否指定表或视图的所有者名称。
WITH ENCRYPTION
加密 syscomments 表中包含 CREATE TRIGGER 语句文本的条目。使用 WITH
ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布。
AFTER
指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有
的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。
如果仅指定 FOR 关键字,则 AFTER 是默认设置。
不能在视图上定义 AFTER 触发器。
INSTEAD OF
指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
在表或视图上,每个 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
指定应该添加现有类型的其它触发器。只有当兼容级别是 65 或更低时,才需要
使用该可选子句。如果兼容级别是 70 或更高,则不必使用 WITH APPEND 子句添加
现有类型的其它触发器(这是兼容级别设置为 70 或更高的 CREATE TRIGGER 的默认
行为)。有关更多信息,请参见 sp_dbcmptlevel。
WITH APPEND 不能与 INSTEAD OF 触发器一起使用,或者,如果显式声明 AFTER
触发器,也不能使用该子句。只有当出于向后兼容而指定 FOR 时(没有 INSTEAD OF
或 AFTER),才能使用 WITH APPEND。以后的版本将不支持 WITH APPEND 和 FOR(将
被解释为 AFTER)。
NOT FOR REPLICATION
表示当复制进程更改触发器所涉及的表时,不应执行该触发器。
AS
是触发器要执行的操作。
sql_statement
是触发器的条件和操作。触发器条件指定其它准则,以确定 DELETE、INSERT 或
UPDATE 语句是否导致执行触发器操作。
当尝试 DELETE、INSERT 或 UPDATE 操作时,Transact-SQL语句中指定的触发器
操作将生效。
触发器可以包含任意数量和种类的 Transact-SQL 语句。触发器旨在根据数据修
改语句检查或更改数据;它不应将数据返回给用户。触发器中的 Transact-SQL 语句
常常包含控制流语言。CREATE TRIGGER 语句中使用几个特殊的表:
* deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器
的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的
旧值或新值。例如,若要检索 deleted 表中的所有值,请使用:
SELECT *
FROM deleted
* 如果兼容级别等于 70,那么在 DELETE、INSERT 或 UPDATE 触发器中,SQL
Server 将不允许引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不
能访问 inserted 和 deleted 表中的 text、ntext 和 image 值。若要在 INSERT 或
UPDATE 触发器中检索新值,请将 inserted 表与原始更新表联接。当兼容级别是 65
或更低时,对 inserted 或 deleted 表中允许空值的text、ntext 或 image 列,将
返回空值;如果这些列不可为空,则返回零长度字符串。
当兼容级别是 80 或更高时,SQL Server 允许在表或视图上通过 INSTEAD OF 触
发器更新 text、ntext 或 image 列。
n
是表示触发器中可以包含多条 Transact-SQL 语句的占位符。对于 IF UPDATE
(column) 语句,可以通过重复 UPDATE (column) 子句包含多列。
IF UPDATE (column)
版权声明:本文标题:SQL触发器语法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710902665a578762.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论