SQL SERVER中各类触发器的完整语法及参数说明
分类:计算机教程

语法:

语法
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
        [ 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 on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH dml_trigger_option [ ,...n ] ]{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME method specifier [ ; ]  }dml_trigger_option ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]method_specifier ::= assembly_name.class_name.method_nameTrigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS statement (DDL Trigger)CREATE TRIGGER trigger_name ON { ALL SERVER | DATABASE } [ WITH ddl_trigger_option [ ,...n ] ]{ FOR | AFTER } { event_type | event_group } [ ,...n ]AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME  method specifier  [ ; ] }ddl_trigger_option ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]method_specifier ::= assembly_name.class_name.method_nameTrigger on a LOGON event (Logon Trigger)CREATE TRIGGER trigger_name ON ALL SERVER [ WITH logon_trigger_option [ ,...n ] ]{ FOR| AFTER } LOGON AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME  method specifier  [ ; ] }logon_trigger_option ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]method_specifier ::= assembly_name.class_name.method_name

参数
trigger_男篮世界杯赔率,name

参数:

是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一。可以选择是否指定触发器所有者名称。

schema_name

Table | view

DML 触发器所属架构的名称。DML 触发器的作用域是为其创建该触发器的表或视图的架构。对于 DDL 或登录触发器,无法指定schema_name。

是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。

trigger_name

WITH ENCRYPTION

触发器的名称。trigger_name必须遵循 标识符规则,但trigger_name不能以 # 或 ## 开头。

加密 syscomments 表中包含 CREATE TRIGGER 语句文本的条目。使用 WITH ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布。

table|view

AFTER

对其执行 DML 触发器的表或视图,有时称为触发器表或触发器视图。可以根据需要指定表或视图的完全限定名称。视图只能被 INSTEAD OF 触发器引用。不能对局部或全局临时表定义 DML 触发器。

指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。

DATABASE

如果仅指定 FOR 关键字,则 AFTER 是默认设置。

将 DDL 触发器的作用域应用于当前数据库。如果指定了此参数,则只要当前数据库中出现event_type或event_group,就会激发该触发器。

不能在视图上定义 AFTER 触发器。

ALL SERVER

INSTEAD OF

将 DDL 或登录触发器的作用域应用于当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现event_type或event_group,就会激发该触发器。

指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。

WITH ENCRYPTION

在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。

对 CREATE TRIGGER 语句的文本进行模糊处理。使用 WITH ENCRYPTION 可以防止将触发器作为 SQL Server 复制的一部分进行发布。不能为 CLR 触发器指定 WITH ENCRYPTION。

INSTEAD OF 触发器不能在 WITH CHECK OPTION 的可更新视图上定义。如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错

EXECUTE AS

误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。

指定用于执行该触发器的安全上下文。允许您控制 SQL Server 实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

FOR | AFTER

是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个

AFTER 指定 DML 触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。

,需用逗号分隔这些选项。

如果仅指定 FOR 关键字,则 AFTER 为默认值。

对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项

不能对视图定义 AFTER 触发器。

INSTEAD OF

WITH APPEND

指定执行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作。不能为 DDL 或登录触发器指定 INSTEAD OF。

指定应该添加现有类型的其它触发器。只有当兼容级别是 65 或更低时,才需要使用该可选子句。如果兼容级别是 70 或更高,则不必使用 WITH APPEND 子句添加现有类型的其它

对于表或视图,每个 INSERT、UPDATE 或 DELETE 语句最多可定义一个 INSTEAD OF 触发器。但是,可以为具有自己的 INSTEAD OF 触发器的多个视图定义视图。

触发器(这是兼容级别设置为 70 或更高的 CREATE TRIGGER 的默认行为)。有关更多信息,请参见 sp_dbcmptlevel。

INSTEAD OF 触发器不可以用于使用 WITH CHECK OPTION 的可更新视图。如果将 INSTEAD OF 触发器添加到指定了 WITH CHECK OPTION 的可更新视图中,则 SQL Server 将引发错误。用户须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。

WITH APPEND 不能与 INSTEAD OF 触发器一起使用,或者,如果显式声明 AFTER 触发器,也不能使用该子句。只有当出于向后兼容而指定 FOR 时(没有 INSTEAD OF 或 AFTER)

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

,才能使用 WITH APPEND。以后的版本将不支持 WITH APPEND 和 FOR(将被解释为 AFTER)。

指定数据修改语句,这些语句可在 DML 触发器对此表或视图进行尝试时激活该触发器。必须至少指定一个选项。在触发器定义中允许使用上述选项的任意顺序组合。

NOT FOR REPLICATION

对于 INSTEAD OF 触发器,不允许对具有指定级联操作 ON DELETE 的引用关系的表使用 DELETE 选项。同样,也不允许对具有指定级联操作 ON UPDATE 的引用关系的表使用 UPDATE 选项。

表示当复制进程更改触发器所涉及的表时,不应执行该触发器。

event_type

AS

执行之后将导致激发 DDL 触发器的 Transact-SQL 语言事件的名称。DDL 事件中列出了 DDL 触发器的有效事件。

是触发器要执行的操作。

event_group

sql_statement

预定义的 Transact-SQL 语言事件分组的名称。执行任何属于event_group的 Transact-SQL 语言事件之后,都将激发 DDL 触发器。DDL 事件组中列出了 DDL 触发器的有效事件组。

是触发器的条件和操作。触发器条件指定其它准则,以确定 DELETE、INSERT 或 UPDATE 语句是否导致执行触发器操作。

CREATE TRIGGER 运行完毕之后,event_group还可通过将其涵盖的事件类型添加到sys.trigger_events目录视图中来作为宏使用。

当尝试 DELETE、INSERT 或 UPDATE 操作时,Transact-SQL语句中指定的触发器操作将生效。

WITH APPEND

触发器可以包含任意数量和种类的 Transact-SQL 语句。触发器旨在根据数据修改语句检查或更改数据;它不应将数据返回给用户。触发器中的 Transact-SQL 语句常常包含控制

指定应该再添加一个现有类型的触发器。仅当兼容级别等于或低于 65 时,才需要使用此可选子句。如果兼容级别等于或高于 70,则不需要使用 WITH APPEND 子句来添加现有类型的其他触发器。这是兼容级别设置等于或高于 70 的 CREATE TRIGGER 的默认行为。WITH APPEND 不能与 INSTEAD OF 触发器一起使用。如果显式声明了 AFTER 触发器,则也不能使用该子句。仅当为了向后兼容而指定了 FOR 时时,才能使用 WITH APPEND。如果指定了 EXTERNAL NAME,则不能指定 WITH APPEND。

流语言。CREATE TRIGGER 语句中使用几个特殊的表:

NOT FOR REPLICATION

deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例

指示当复制代理修改涉及到触发器的表时,不应执行触发器。有关详细信息,请参阅使用 NOT FOR REPLICATION 来控制约束、标识和触发器。

如,若要检索 deleted 表中的所有值,请使用:
SELECT *
    FROM deleted
   
如果兼容级别等于 70,那么在 DELETE、INSERT 或 UPDATE 触发器中,SQL Server 将不允许引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不能访问 inserted

本文由美洲杯赔率发布于计算机教程,转载请注明出处:SQL SERVER中各类触发器的完整语法及参数说明

上一篇:动态SQL中返回数值的实现代码 下一篇:没有了
猜你喜欢
热门排行
精彩图文