zoukankan      html  css  js  c++  java
  • sql server 事务嵌套 并行执行

    ------外层事务

    declare @flag int
    set @flag=0

    declare @successcount int
    set @successcount=0

    declare @returnvalue int

    begin tran t1
    while @flag<10
    begin
    set @flag=@flag+1

    --调用内层事务,存储过程
    exec @returnvalue= testpro
    @flag=@flag
    if @returnvalue=1
    begin
    set @successcount=@successcount+1
    end
    end

    if @successcount>0
    begin
    commit tran t1
    end
    else
    begin
    rollback tran t1
    end

    ---内层事务(存储过程)


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    alter PROCEDURE [dbo].[testpro]
    (
    @flag int
    )
    AS
    BEGIN
    declare @trancount int
    set @trancount= @@trancount
    print @trancount

    if @trancount>0
    begin
    --如果事务数大于0 保存事务
    save tran outertran
    print @@trancount
    end
    else
    begin
    --单独调用 开始新事务
    begin tran innertran
    end
    begin try
    --执行语句
    insert into testtable(id) values(@flag)


    --如果执行后 有 条件不合适需要回滚 执行回滚
    if @flag not in (2,4,7)
    begin
    if @trancount>0
    begin
    rollback tran outertran
    return -1
    end
    else
    begin
    rollback tran innertran
    return -1
    end
    end
    else
    begin
    --如果执行成功 单独调用 提交事务
    if @trancount=0
    begin
    commit tran innertran
    return 0--单独调用 成功返回0
    end
    --嵌套调用 不提交事务 只返回 状态
    else
    begin
    return 1--循环调用 成功返回1
    end
    end
    end try
    begin catch
    --有异常 需要回滚
    if @trancount>0
    begin
    rollback tran outertran
    return -1--执行失败返回-1
    end
    else
    begin
    rollback tran innertran
    return -1
    end
    end catch

    END
    GO

  • 相关阅读:
    iptables
    iftop
    sed&awk
    rz&sz
    关于springboot + mybatis plus 使用事务
    关于JsonArray.toList转换
    jmeter脚本录制
    去掉百度右边的百度热搜等干扰项,集中注意力呀~~
    报错
    图片的异步上传
  • 原文地址:https://www.cnblogs.com/xiguanjiandan/p/3658170.html
Copyright © 2011-2022 走看看