`
javazeke
  • 浏览: 85855 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

SQL触发器语法参考

阅读更多

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_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)

测试在指定的列上进行的 Insert 或 Update 操作,不能用于 Delete 操作。可以指定多列。因为在 ON 子句中指定了表名,所以在 IF Update 子句中的列名前不要包含表名。若要测试在多个列上进行的 Insert 或 Update 操作,请在第一个操作后指定单独的 Update(column) 子句。在 Insert 操作中 IF Update 将返回 TRUE 值,因为这些列插入了显式值或隐性 (NULL) 值。


说明  IF Update (column) 子句的功能等同于 IF、IF...ELSE 或 WHILE 语句,并且可以使用 BEGIN...END 语句块。有关更多信息,请参见控制流语言

分享到:
评论

相关推荐

    SQL触发器语法参考.rar

    SQL触发器语法参考

    SQL触发器语法参考.pdf

    SQL触发器语法参考.pdf

    sql触发器语法兼实例

    触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。

    SQL触发器的使用及语法

    SQL 触发器的使用及语法 SQL 触发器是数据库系统中的一种特殊的存储过程,它可以在特定的操作(例如插入、更新、删除)时自动执行某些操作。触发器可以用来实现业务逻辑的自动化、数据的完整性和一致性、数据的安全...

    SQLServer触发器语法.pdf

    SQL Server 触发器语法详解 SQL Server 触发器是数据库管理系统中的一种机制,用于在执行某些操作时自动执行特定的操作。触发器可以帮助维护数据的一致性和完整性,提高数据库的安全性和可靠性。本文将详细介绍 SQL...

    Oracle和SqlServer语法区别

    可以看到,Oracle的PL/SQL触发器和SqlServer的Transact-SQL触发器语法有所不同。 四、迁移策略 了解了Oracle和SqlServer语法的区别后,我们可以开始迁移策略。以下是一些迁移策略: 1. 验证所有SELECT、INSERT、...

    SQLite触发器的SQL语法.pdf

    SQLite 触发器的 SQL 语法 SQLite 触发器是数据库 schema 中的一种自动执行的数据库操作,发生在特定的数据库事件,如 DELETE、INSERT、UPDATE 时。触发器可以由在特殊表上执行的语句触发,或 UPDATE 表中特定的...

    SQL数据库触发器 SQL数据库触发器

    创建一个触发器,触发器的语法很长,简化为: CREATE TRIGGER 触发器名 disibledevent=rMode FROM Deleted -- 向日志表中插入一条简单的删除事件日志 INSERT INTO uSysLog (lEvent) VALUES ('用 户 删 除 了 流 水 ...

    基于sql server 2005的触发器的创建及操作

    以sql server 2005为例介绍如何通过管理器和T-SQL创建触发器。

    SQL server存储过程习题,SQL触发器习题.rar

    SQL存储过程习题,SQL触发器习题,SQL习题,基础语法,与W3School类似,初学者学习使用。

    ORACLE和SQL Server的语法区别

    这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。 要将 Oracle DML 语句和 PL...9. 把 PL/SQL 触发器转换为 Transact-SQL 触发器。 10. 使用 SET SHOWPLAN 语句,优化查询性能。

    oracle和SQL的语法区别

    1. 验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。进行任何必要的修改。 2. 把所有外部联接改为 ...9. 把 PL/SQL 触发器转换为 Transact-SQL 触发器。 10. 使用 SET SHOWPLAN 语句,优化查询性能。

    SQL 触发器详解及代码演示

    文章目录1. 触发器的作用2. 创建触发器3. 查看触发器3.1....创建一个触发器的语法如下: create trigger [触发器名] [触发时机] [触发事件] on [要监控的表名] for each row begin [要执行的语句] end

    SQLSever中的触发器基本语法与作用

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的。...本文给大家介绍SQLSever中的触发器基本语法与作用,感兴趣的朋友一起学习吧

    SqlServer触发器详解

    在程序开发中经常会用到,触发器和存储过程唯一的区别就是触发器不能执行execute语句调用,而是在用户执行Transact-SQL语句时自动触发执行,下面小编给大家详解sqlserver触发器,需要的朋友可以参考下

    SQL语言参考大全、SQL Server精华

    SQL语言参考大全,触发器、游标、存储过程讲得很详细,值得学习!

    阿里云-云数据库OceanBase-SQL参考.pdf

    OceanBase SQL语法参考提供了 OceanBase 云数据库的SQL语法使用指南。本文档涵盖了 OceanBase SQL 语法的基本概念、语言结构、文字值、识别符、注释和保留字等方面的知识点。 OceanBase SQL语法概览 OceanBase ...

Global site tag (gtag.js) - Google Analytics