此语句用于开始用户定义的事务。
BEGIN TRAN[SACTION] [ transaction-name ]
可选参数 transaction-name 是分配给该事务的名称。它必须是有效的标识符。仅在最外层的嵌套 BEGIN/COMMIT 语句对或 BEGIN/ROLLBACK 语句对中使用事务名称。
在事务内部执行时,BEGIN TRANSACTION 语句将事务嵌套级别增加一级。通过 COMMIT 语句可减少嵌套级别。当事务被嵌套时,只有最外层的 COMMIT 使数据库更改永久生效。
Adaptive Server Enterprise 和 Adaptive Server Anywhere 都有两种事务模式。
缺省的 Adaptive Server Enterprise 事务模式称为非链接模式,它单独提交每个语句,除非执行显式 BEGIN TRANSACTION 语句启动事务。相反,与 ISO SQL/92 兼容的链接模式仅当执行显式 COMMIT 时或执行自动提交的语句(如数据定义语句)时才提交事务。
通过设置 CHAINED 数据库选项可以控制模式。Adaptive Server Anywhere 中的 ODBC 和嵌入式 SQL 连接的缺省设置是 ON,这种情况下,Adaptive Server Anywhere 在链接模式下运行。(ODBC 用户还应该检查 AutoCommit ODBC 设置)。TDS 连接的缺省值是 OFF。
在非链接模式下,事务在任何数据检索或修改语句前隐式启动。这些语句包括:DELETE、INSERT、OPEN、FETCH、SELECT 和 UPDATE。仍必须用 COMMIT 或 ROLLBACK 语句显式结束事务。
不能在事务中变更 CHAINED 选项。
| 注意 当调用存储过程时,应该确保它在要求的事务模式下正确运行。 |
有关详细信息,请参见 CHAINED 选项 [compatibility]。
当前嵌套级别保存在全局变量 @@trancount 中。在执行第一个 BEGIN TRANSACTION 语句前,@@trancount 变量的值为 0,而仅当 @@trancount 等于 1 时执行 COMMIT 才会对数据库进行永久更改。
没有事务名称或保存点名称的 ROLLBACK 语句总是将语句回退到最外层的 BEGIN TRANSACTION(显式或隐式)语句,并且取消整个事务。
无。
无。
SQL/92 供应商扩展。
SQL/99 供应商扩展。
Sybase 受 Adaptive Server Enterprise 支持。
下面的批处理语句报告 @@trancount 的连续值:0、1、2、1 和 0。这些值显示在服务器窗口上。
PRINT @@trancount BEGIN TRANSACTION PRINT @@trancount BEGIN TRANSACTION PRINT @@trancount COMMIT PRINT @@trancount COMMIT PRINT @@trancount
@@trancount 的值只可用于跟踪已发出的显式 BEGIN TRANSACTION 语句的数量。
当 Adaptive Server Enterprise 隐式启动事务时,@@trancount 变量设置为 1。当隐式启动事务时,Adaptive Server Anywhere 不将 @@trancount 变量值设置为 1。因此,在任何 BEGIN TRANSACTION 语句前(甚至有当前事务),Adaptive Server Anywhere @@trancount 变量的值为零,而在 Adaptive Server Enterprise(在 chained 模式下)中,它的值为 1。
对于用 BEGIN TRANSACTION 语句启动的事务,在执行第一个 BEGIN TRANSACTION 语句后,@@trancount 的值在 Adaptive Server Anywhere 和 Adaptive Server Enterprise 中均为 1。如果事务由其它语句隐式启动,然后执行了 BEGIN TRANSACTION 语句,则执行该 BEGIN TRANSACTION 语句后,@@trancount 的值在 Adaptive Server Anywhere 和 Adaptive Server Enterprise 中均为 2。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。