Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » SQL 方言和兼容性 » SQL 方言 » Transact-SQL 过程语言概述

 

Transact-SQL 触发器概述

触发器兼容性需要触发器功能和语法的兼容性。本节提供有关 Transact-SQL 和 SQL Anywhere 触发器的功能兼容性的概述。

Adaptive Server Enterprise 支持语句级 AFTER 触发器;即,在触发语句完成后执行的触发器。SQL Anywhere 支持行级 BEFORE、AFTER 和 INSTEAD OF 触发器,以及语句级 AFTER 和 INSTEAD OF 触发器。请参见触发器简介

行级触发器不属于 Transact-SQL 兼容性功能,在使用过程、触发器和批处理中会讨论行级触发器。

有关不支持或不同的 Transact-SQL 触发器的说明

SQL Anywhere 中不支持的或不同的 Transact-SQL 触发器功能包括:

  • 触发器触发其它触发器   假定触发器执行将触发其它触发器的操作(在该操作由用户直接执行的情况下)。对于这种情况,SQL Anywhere 和 Adaptive Server Enterprise 的响应方式略有不同。缺省情况下,Adaptive Server Enterprise 中的触发器最多能够引发可配置的嵌套级别(缺省值为 16)的其它触发器。您可以使用 Adaptive Server Enterprise 的嵌套触发器选项来控制嵌套级别。在 SQL Anywhere 中,触发器可以毫无限制地触发其它触发器(除非内存不足)。

  • 触发器自行触发   假定触发器执行将触发同一触发器的操作(在该操作由用户直接执行的情况下)。对于这种情况,SQL Anywhere 和 Adaptive Server Enterprise 的响应方式略有不同。缺省情况下,在 SQL Anywhere 中,非 Transact-SQL 触发器以递归方式自行触发,而 Transact-SQL 方言触发器则不以递归方式自行触发。然而,对于 Transact-SQL 方言触发器,您可以使用 SET 语句 [T-SQL] 的 self_recursion 选项,来允许触发器以递归方式调用其自身。请参见SET 语句 [T-SQL]

    缺省情况下,Adaptive Server Enterprise 中的触发器不以递归方式调用其自身,但您可以使用 self_recursion 选项允许递归发生。

  • 触发器中的 ROLLBACK 语句   Adaptive Server Enterprise 允许在触发器中使用 ROLLBACK TRANSACTION 语句来回退触发器所属的整个事务。由于触发操作及其触发器一起形成一个原子语句,SQL Anywhere 不允许在触发器中使用 ROLLBACK(或 ROLLBACK TRANSACTION)语句。

    但 SQL Anywhere 提供了与 Adaptive Server Enterprise 兼容的 ROLLBACK TRIGGER 语句,以撤消触发器中的操作。请参见ROLLBACK TRIGGER 语句