语法:
Trigger on an INSERT, UPDATE, or DELETE statement to a table or view 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 ::=as百度竞价推广bly_name.class_name.method_nameTrigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS statement 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 ::=as百度竞价推广bly_name.class_name.method_nameTrigger on a LOGON event CREATE TRIGGER trigger_name ON ALL SERVER [ WITH logon_trigger_option [ ,...n ] ]{ FOR| AFTER } LOGONAS { sql_statement[ ; ] [ ,...n ] | EXTERNAL NAME method specifier [ ; ] }logon_trigger_option ::=[ ENCRYPTION ][ EXECUTE AS Clause ]method_specifier ::=as百度竞价推广bly_name.class_name.method_name参数:
schema_name
DML 触发器所属构造的名字。DML 触发器有哪些用途域是为其创建该触发器的表或视图的构造。对于 DDL 或登录触发器,没办法指定schema_name。
trigger_name
触发器的名字。trigger_name需要遵循 标识符规则,但trigger_name不可以以 # 或 ## 开头。
table|view
对其实行 DML 触发器的表或视图,有时称为触发器表或触发器视图。可以参考需要指定表或视图的完全限定名字。视图只能被 INSTEAD OF 触发器引用。不可以对局部或全局临时表概念 DML 触发器。
DATABASE
将 DDL 触发器有哪些用途域应用于目前数据库。假如指定了此参数,则只须目前数据库中出现event_type或event_group,就会激起该触发器。
ALL SERVER
将 DDL 或登录触发器有哪些用途域应用于目前服务器。假如指定了此参数,则只须目前服务器中的任何地方上出现event_type或event_group,就会激起该触发器。
WITH ENCRYPTION
对 CREATE TRIGGER 语句的文本进行模糊处置。用 WITH ENCRYPTION 可以预防将触发器作为 SQL Server 复制的一部分进行发布。不可以为 CLR 触发器指定 WITH ENCRYPTION。
EXECUTE AS
指定用于实行该触发器的安全上下文。允许你控制 SQL Server 实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。
FOR | AFTER
AFTER 指定 DML 触发器仅在触发 SQL 语句中指定的所有操作都已成功实行时才被触发。所有些引用级联操作和约束检查也需要在激起此触发器之前成功完成。
假如仅指定 FOR 关键词,则 AFTER 为默认值。
不可以对视图概念 AFTER 触发器。
INSTEAD OF
指定实行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作。不可以为 DDL 或登录触发器指定 INSTEAD OF。
对于表或视图,每一个 INSERT、UPDATE 或 DELETE 语句最多可概念一个 INSTEAD OF 触发器。但,可以为具备我们的 INSTEAD OF 触发器的多个视图概念视图。
INSTEAD OF 触发器不能用于用 WITH CHECK OPTION 的可更新视图。假如将 INSTEAD OF 触发器添加到指定了 WITH CHECK OPTION 的可更新视图中,则 SQL Server 将引发错误。用户须用 ALTER VIEW 删除该选项后才能概念 INSTEAD OF 触发器。
{ [DELETE] [,] [INSERT] [,] [UPDATE] }
指定数据修改语句,这类语句可在 DML 触发器对此表或视图进行尝试时激活该触发器。需要至少指定一个选项。在触发器概念中允许用上述选项的任意顺序组合。
对于 INSTEAD OF 触发器,不允许对具备指定级联操作 ON DELETE 的引用关系的表用 DELETE 选项。同样,也不允许对具备指定级联操作 ON UPDATE 的引用关系的表用 UPDATE 选项。
event_type
实行之后将致使激起 DDL 触发器的 Transact-SQL 语言事件的名字。DDL 事件中列出了 DDL 触发器的有效事件。
event_group
预概念的 Transact-SQL 语言事件分组的名字。实行任何是event_group的 Transact-SQL 语言事件之后,都将激起 DDL 触发器。DDL 事件组中列出了 DDL 触发器的有效事件组。
CREATE TRIGGER 运行完毕之后,event_group还可通过将它涵盖的事件种类添加到sys.trigger_events目录视图中来作为宏用。
WITH APPEND
指定应该再添加一个现有种类的触发器。仅当兼容级别等于或低于 65 时,才需要用此可选子句。假如兼容级别等于或高于 70,则无需用 WITH APPEND 子句来添加现有种类的其他触发器。这是兼容级别设置等于或高于 70 的 CREATE TRIGGER 的默认行为。WITH APPEND 不可以与 INSTEAD OF 触发器一块用。假如显式声明了 AFTER 触发器,则也不可以用该子句。仅当为了向后兼容而指定了 FOR 时(但没 INSTEAD OF 或 AFTER)时,才能用 WITH APPEND。假如指定了 EXTERNAL NAME(即触发器为 CLR 触发器),则不可以指定 WITH APPEND。
NOT FOR REPLICATION
指示当复制代理修改涉及到触发器的表时,不应实行触发器。有关详细情况,请参阅用 NOT FOR REPLICATION 来控制约束、标识和触发器。
sql_statement
触发条件和操作。触发器条件指定其他标准,用于确定尝试的 DML、DDL 或 logon 事件是不是致使实行触发器操作。
尝试上述操作时,将实行 Transact-SQL 语句中指定的触发器操作。
触发器可以包括任意数目和类型的 Transact-SQL 语句,但也有例外。触发器的作用是依据数据修改或概念语句来检查或更改数据;它不应向用户返回数据。触发器中的 Transact-SQL 语句常常包括控制流语言。
DML 触发器用deleted和inserted逻辑(定义)表。它们在结构上像概念了触发器的表,即对其尝试实行了用户操作的表。在deleted和inserted表保存了或许会被用户更改的行的旧值或新值。比如,若要检索deleted表中的所有值,则用:
SELECT *
FROM deleted
DDL 和登录触发器通过用 EVENTDATA 函数来获得有关触发事件的信息。
DELETE、INSERT 或 UPDATE 触发器中,假如兼容级别设置为 70,则 SQL Server 不允许在inserted和deleted表中存在text、ntext或image列引用。不可以访问inserted和deleted表中的text、ntext和image值。若要在 INSERT 或 UPDATE 触发器中检索新值,请将inserted表与原始更新表联接。假如兼容级别等于或低于 65,则将为inserted或deleted的文本、ntext或者允许 Null 值的image列返回 Null 值;假如列不可以为 Null,则返回零长度的字符串。
假如兼容级别等于或高于 80,SQL Server 将允许通过表或视图的 INSTEAD OF 触发器来更新text、ntext或image列。
method_specifier
对于 CLR 触发器,指定程序集与触发器绑定的办法。该办法不可以带有任何参数,并且需要返回空值。class_name需要是有效的 SQL Server 标识符,并且该类需要存在于可见程序集中。假如该类有一个用“.”来分隔命名空间部分的命名空间限定名字,则类名需要用 [] 或“ ”分隔符分隔。该类不可以为嵌套类。
TAG标签:SQLSERVER(1)
转载请说明来源于当下软件园(https://www.gpsdan.com)
本文地址:https://www.gpsdan.com/news/2208.html
郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com

赣公网安备 36010602000087号
相关文章