VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 899|回复: 5

请教一个事务的基础问题

[复制链接]

2

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-7 12:20:02 | 显示全部楼层 |阅读模式
例:
begin transaction
     update storage
     set Quantity = (Quantity - @insertquantity)
     where storageid = @storageid
     
     select @updatestor_error = @@ERROR
       
     update RealStocking
     set Quantity = (Quantity - @insertquantity)
     where Stockingid =  @stockingid
       
     select @updaterestoc_error = @@ERROR

  if @updatestor_error = 0 and @updaterestoc_error = 0
  begin
        commit transaction
  end
  else
  begin
        if @updatestor_error <> 0
           print 'an error occured during update storage.'
        if @updaterestoc_error <> 0
           print 'an error occured during update reakstocking.'

        rollback transaction
  end

由于刚接触事务,有几个问题不大明白,想请教一下.
1. 我看有些文章说.如果一个事务已commit或rollback结束了.后面的语句仍将继续.
那么,上面的例子中.如果是在commit transaction结束的.那后面的else还会继续被判断到.只不过条件不符合没有执行里面的语句,是这样吗?
2. 如果是在commit transaction结束的,那后面ELSE中的rollback transaction又是对应的那个begin transaction呢?是不是commit transaction结束了.SQL SERVER会自动加上一个看不见的begin transaction去对应rollback transaction呢.谢谢
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-1-7 16:45:01 | 显示全部楼层
第一个问题和事务没有关系,是if语句的问题
第二个问题是只要是提交了事务或者回滚了事务,就表示事务完成了
回复

使用道具 举报

2

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-8 06:54:01 | 显示全部楼层
declare @number1 int
declare @number2 int
set @number1 = 1
set @number2 = 2
begin transaction
        select @number1
rollback transaction
         select @number2
commit transaction
那是不是可以这么理解, 上面的这些语句是错误的.因为先执行了rollback transaction
所以此次事务已经结束了.而后面的commit transaction由于没有对应到新的begin transaction(由于第一个begin transaction已经结束)所以程序上会包错.是这么理解吗?谢谢       
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-3-14 18:30:02 | 显示全部楼层
你是没有理解if else,我也是初次接触事务,但也理解了
1楼给出是begin tran 和 rollback tran 或者是begin tran 和 commit tran对应组成一对

而楼上的就commit tran 没有对应的begin tran嘛
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-5 09:00:01 | 显示全部楼层
if commit else rollback  正常逻辑啊
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-5 09:15:01 | 显示全部楼层
LZ 好像把东西想复杂了,其实就是if else 的通常理解和判断,只是判断的内容是什么情况下commit什么情况下rollback而已
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表