Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

BEGIN TRANSACTION 语句


说明 

此语句用于开始用户定义的事务。

语法 

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(显式或隐式)语句,并且取消整个事务。

权限 

无。

副作用 

无。

另请参见 
标准和兼容性 
示例 

下面的批处理语句报告 @@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。


Collection Contents 上一页 下一页 PDF