嵌套事务
2011-03-18 12:38
381 查看
@@TRANCOUNT 函数记录当前事务的嵌套级别。每个 BEGIN TRANSACTION 语句使 @@TRANCOUNT 增加 1。每个 COMMIT TRANSACTION 或 COMMIT WORK 语句使 @@TRANCOUNT 减去 1。没有事务名称的 ROLLBACK WORK 或 ROLLBACK TRANSACTION 语句将回滚所有嵌套事务,并使 @@TRANCOUNT 减小到 0。使用一组嵌套事务中最外部事务的事务名称的 ROLLBACK TRANSACTION 将回滚所有嵌套事务,并使 @@TRANCOUNT 减小到 0。在无法确定是否已经在事务中时,可以用 SELECT @@TRANCOUNT 确定 @@TRANCOUNT 是等于 1 还是大于 1。如果 @@TRANCOUNT 等于 0,则表明不在事务中。
from: http://wenku.baidu.com/view/7be79a0c844769eae009ed30.html
SET QUOTED_IDENTIFIER OFF; GO SET NOCOUNT OFF; GO CREATE TABLE TestTrans(Cola INT PRIMARY KEY, Colb CHAR(3) NOT NULL); GO CREATE PROCEDURE TransProc @PriKey INT, @CharCol CHAR(3) AS BEGIN TRANSACTION InProc INSERT INTO TestTrans VALUES (@PriKey, @CharCol) INSERT INTO TestTrans VALUES (@PriKey + 1, @CharCol) COMMIT TRANSACTION InProc; GO ---------------------------------------------------------------------------- /* Start a transaction and execute TransProc. */ BEGIN TRANSACTION OutOfProc; GO EXEC TransProc 1, 'aaa'; GO /* Roll back the outer transaction, this will roll back TransProc's nested transaction. */ ROLLBACK TRANSACTION OutOfProc; GO ---------------------------------------------------------------------------- EXECUTE TransProc 3,'bbb'; GO /* The following SELECT statement shows only rows 3 and 4 are still in the table. This indicates that the commit of the inner transaction from the first EXECUTE statement of TransProc was overridden by the subsequent rollback. */ SELECT * FROM TestTrans;
from: http://wenku.baidu.com/view/7be79a0c844769eae009ed30.html
保存点:sqlserver 提供一种用于回滚事务的机制:Save Tran, 它不会对@@trancount产生任何 影响,只是标记回滚事务时可以到达的点。 DECLARE @nestFlag BIT IF(@@TRANCOUNT>0) BEGIN SET @nestedFlag = 1 SAVE TRAN TestA END ELSE BEGIN SET @nestFlag = 0 BEGIN TRAN TestA END --执行业务操作,如果出错就回滚事务点,并立即返回 IF (@@error <> 0) BEGIN ROLLBACK TRAN TestA RETURN 0 END IF (@testedFlag=0) BEGIN COMMIT TRAN TestA END
相关文章推荐
- 解惑 spring 嵌套事务 详细讲了spring的事务
- 解惑 spring 嵌套事务
- Spring的事务管理难点剖析(3):事务方法嵌套调用的迷茫
- Oracle嵌套事务(Nested Transaction)与自治事务(Autonomous Transaction)详解
- Spring JDBC-事务方法嵌套调用解读
- 解惑 spring 嵌套事务
- 解惑 spring 嵌套事务
- spring配置和注解事务同时存在导致的事务嵌套
- 脱离 Spring 实现复杂嵌套事务,之三(REQUIRES_NEW - 独立事务)
- 嵌套事务的问题
- Oracle 嵌套事务与自治事务思考
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- SQL SERVER 2000 嵌套 存储过程 事务 回滚
- 事务与锁定-嵌套事务和自治事务
- [SQL Server]嵌套事务与分布式事务
- 嵌套事务和事务保存点的错误处理
- Spring事务传播特性的浅析——事务方法嵌套调用
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
- hibernate 事务嵌套导致org.hibernate.TransactionException: Transaction not successfully started
- 嵌套事务、隐式事务