语法:
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_name
Trigger 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_name
Trigger 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
参数:
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 (Transact-SQL)
函数来获取有关触发事件的信息。
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
标识符,并且该类必须存在于可见程序集中。如果该类有一个使用“.”来分隔命名空间部分的命名空间限定名称,则类名必须用 [] 或“
”分隔符分隔。该类不能为嵌套类。
sqlserver 触发器语法
时间: 2024-10-26 03:32:25
sqlserver 触发器语法的相关文章
SQLServer 触发器入门
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常用于加强数据的完整性约束和业务规则等. 触发器可以从 DBA_TRIGGERS ,U
MySQL 触发器 语法实例
MySQL触发器语法: DELIMITER // create trigger [trigger_name] [before/after] [insert/delete/update] on [table_name] for each row begin --doing something like this insert into tab2(tab2_id) values (new.tab1_id); end;// DELIMITER; 测试通过
SQLSERVER存储过程语法具体解释
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sq
一次SQLSERVER触发器编写感悟
背景:BOSS须要我写一个工厂採集端到服务器端的数据同步触发器,数据库採用的是sqlserver2008 需求:将多台採集机的数据同步到server中,假设採集端数据库与server数据库连接失败则将数据保存到记录表中 前期思路:从採集端创建server端的数据库链接,通过採集端的insert,update触发.同一时候往远程表写入 问题:因为初始接触sqlserver.对sqlserver触发器了解不深.查阅一些资料后写出了满足正常情况下(连接服务器数据库正常)的触发器. create tri
zabbix -- 触发器语法
小Q:山一程,水一程,身向榆关那畔行,夜深千帐灯. --- 纳兰容若<长相思> 最近一直在学zabbix,总计并归纳了触发器语法参数配置 ,并实时配置搭建,希望可以帮助大家, 有问题欢迎留言解决探讨. 1.语法 2.示例 -------------------------------------------------------------------------------------------------- 1.Zabbix触发器的语法如下: {<se
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sq
sqlserver 触发器实例
实例1:update USE [数据库名称]GO/****** Object: Trigger [dbo].[触发器名称] Script Date: 05/08/2014 12:40:25 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER [dbo].[T_触发器名称] ON [dbo].[表名称] FOR UPDATEAS DECLARE @Id VARCHAR(32), @remain_cost DECIMAL
mysql 触发器语法详解
1.创建Mysql触发器: 语法: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt //语句块 END: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt END:大写的为关键字 trigger_nam
sqlserver 触发器
何为触发器? 在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程,它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表.Deleted和Inserted分别代表出发事件的表“旧的一条记录”和“新的一条记录”.这两个表由系统来维护﹐它们存在于内存中而不是在数据库中.这两