【问题标题】:The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION, but still getting an errorROLLBACK TRANSACTION请求没有对应的BEGIN TRANSACTION,但还是报错
【发布时间】:2021-01-02 16:40:12
【问题描述】:

简单查询: 在 UPDATE 之前,EffectiveStartDt 的值为 NULL 在 UPDATE 和 ROLLBACK 之后,我希望它回到 NULL

begin tran t1
update MasterPayor 
set EffectiveStartDt = '2020-09-17' 
where MasterPayorId = 1
commit

rollback tran t1

我已经定义了事务,但我仍然收到回滚错误

【问题讨论】:

  • 您在更新后立即提交了事务,因此该事务不再可用
  • 我还能在哪里提交......当然不是在回滚之后??
  • 如果你想回滚事务你不需要提交。它是一个非此即彼的/或。如果您想将更改提交到数据库,请使用 Commit,如果您想回滚,请使用 rollback。
  • 这解决了问题,谢谢......但是,为什么有人会使用 COMMIT,看到即使没有它,数据库也会更新,并存储新值。
  • 如果您使用 begin tran 并且未提交,则关闭查询窗口时事务将回滚。 stackoverflow.com/questions/4896479/…。如果你不使用 begin tran 那么查询将被提交

标签: sql sql-server transactions rollback


【解决方案1】:

COMMIT 将更新提交到数据库并清除以匹配的BEGIN TRAN 开始的事务,因此当您尝试回滚时会出错。如果您想回滚,请使用不带 COMMIT 的 ROLLBACK

begin tran t1
update MasterPayor 
set EffectiveStartDt = '2020-09-17' 
where MasterPayorId = 1

rollback tran t1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多