PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 数据库 > SQL Server教程 > 正文

    SQL Server存储过程嵌套事务处理

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形。下面是一种解决存储过程嵌套调用的通用代码,在...
    某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形。

    下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否可能被其他存储过程调用的情况下,建议每个存储过程都按照这个模板建立。
     

     
    复制代码代码如下:
    1. create proc proc_example
    2. as
    3. begin
    4.     --声明变量,存放当前已开启的事务数
    5.     declare @exist_trancount int
    6.     select @exist_trancount = @@trancount
    7.  
    8.     if @exist_trancount > 0
    9.         --创建事务保存点
    10.         save transaction tran_proc
    11.     else
    12.         --开启新事务
    13.         begin transaction tran_proc
    14.  
    15.     /*
    16.         存储过程业务处理代码
    17.         ·········
    18.     */
    19.     if @@error<>0
    20.         goto error
    21.  
    22.     if @exist_trancount = 0
    23.         --提交事务
    24.         commit tran tran_proc
    25.         return 1
    26.     error:
    27.         --回滚事务或者事务保存点
    28.         rollback transaction tran_proc
    29.         return -1
    30.  
    31. end
    1、首先判断当前存储过程实例执行是否是嵌套事务调用。如果是嵌套,则存储过程判断的@@TRANCOUNT应该大于0,此时创建一个事务保存点,而非开启新事务;如果不是嵌套事务,则@@TRANCOUNT应该为0,此时开启新事务即可

    2、然后,是存储过程本身的业务处理代码,每一步处理代码需要判断@@ERROR,如果<>0,执行error代码

    3、最后,如果处理正确执行,并且非嵌套调用,则提交事务;如果发生错误,则回滚事务或者回滚保存点。

    当然调用存储过程的地方,需要判断存储过程的返回值来做相应的处理

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-36-412-1.html
    相关热词搜索: 存储过程 嵌套 事务