zoukankan      html  css  js  c++  java
  • 事物及exec

    事物3要出不多讲:

    1.BEGIN TRANSACTION--开启事务

    2.COMMIT TRANSACTION--事务执行

    3.ROLLBACK TRANSACTION--事务回滚

    俩总捕捉事物的方式

    一:记录错误号:这种方式

    1.这种方式的代码在错误发生后会一直执行下去。
    ALTER PROC [dbo].[trans]
      @num NVARCHAR(20)
      AS
      BEGIN TRANSACTION--开启事务
       SELECT * FROM trantest(TABLOCKX)
       --动态执行语句
       DECLARE @sql NVARCHAR(200),@error INT 
       SET @error=0
       PRINT '开始测试1'
       --INSERT INTO trantest(num) values(@num)
       SET @sql='INSERT INTO trantest(num) values(@num)'
       EXECUTE sp_executesql @sql,N'@num nvarchar(20) ',@num
       SET @error=@error+@@error--接收错误号
    
       PRINT @error 
       IF @error=0
       BEGIN 
            PRINT '执行事务'
            COMMIT TRANSACTION--事务执行
       END 
       ELSE    
       BEGIN
            PRINT '回滚事务'
            ROLLBACK TRANSACTION--事务回滚
       END 
    GO

    二:try catch 方式捕捉,这种方式

    1.在发生错误后,会直接调整到catch语句,后面的语句就不再执行

    CREATE PROC [dbo].[TryTrans]
      @num NVARCHAR(20)
      AS
            BEGIN TRANSACTION
              DECLARE @sql NVARCHAR(200),@error INT 
            SET @error=0
      BEGIN TRY
            --动态执行语句
    
            PRINT '开始测试1'
            --INSERT INTO trantest(num) values(@num)
            SET @sql='INSERT INTO trantest(num) values(@num)'
            EXECUTE sp_executesql @sql,N'@num nvarchar(20) ',@num
            PRINT '异常外'
    
      END TRY
      BEGIN CATCH
            PRINT '出现异常,错误编号:' + convert(varchar,error_number()) + ',错误消息:' + error_message()
            SET @error = @error + 1
      END CATCH
    
    IF(@error > 0)
        BEGIN
            --执行出错,回滚事务
            ROLLBACK TRAN;
            PRINT '转账失败,取消交易!';
        END
    ELSE
        BEGIN
            --没有异常,提交事务
            COMMIT TRAN;
            PRINT '转账成功!';
        END
      
      GO

    上面两种调用方式:EXEC trans @num=123456789011

    上面2个语句都用到了exec动态执行语句,@@error为全局的,经过测试exec动态执行的错误号也都能捕捉到。

  • 相关阅读:
    3、面向对象
    今日记事
    javascript 学习javascript高级程序设计
    数据库操作语言分类
    project遇到问题了。
    CentOS设置程序开机自启动的方法
    ECMAScript 基础 [完]
    CentOS 网络设置修改
    Spring Boot项目Circular view path问题解决
    数据库设计
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/5843902.html
Copyright © 2011-2022 走看看