• 嵌套事务


    @@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,则表明不在事务中。

    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
    

  • 相关阅读:
    vue学习之五生命周期
    vue学习之四组件系统
    vue学习之三常用命令
    vue学习之二ECMAScript6标准
    vue学习之一vue初识
    (转)nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
    python技巧总结之set、日志、rsa加密
    (转)二十三种设计模式及其python实现
    Python之traceback错误堆栈信息处理
    python虚拟环境--virtualenv
  • 原文地址:https://www.cnblogs.com/wucg/p/1987957.html
Copyright © 2020-2023  润新知