【问题标题】:Sql server COMMIT without Tran | Transaction?Sql server COMMIT 没有 Tran |交易?
【发布时间】:2012-02-13 13:11:21
【问题描述】:

根据 msdn :提交语法是:

但是,当我省略 tran/transaction 单词时 - 它确实可以编译并运行,没有错误。

它是如何工作的?

它会做其他事情吗?

【问题讨论】:

    标签: sql-server-2005 transactions


    【解决方案1】:

    所讨论的 COMMIT 实际上并不是您认为的 COMMIT。见COMMIT WORK

    提交[工作] [; ]

    备注

    此语句的功能与 COMMIT TRANSACTION 相同,但 COMMIT TRANSACTION 接受用户定义的事务名称。这种 COMMIT 语法,无论是否指定可选关键字 WORK,都与 SQL-92 兼容。

    所以COMMIT 本身就是COMMIT WORK,它与COMMIT TRANSACTION 相同。
    ROLLBACK [ WORK ] 同上

    评论后,

    BEGIN TRANSACTION gbn
    SELECT 1
    COMMIT gbn -- fail
    GO
    BEGIN TRANSACTION gbn
    SELECT 2
    COMMIT TRAN gbn -- works
    GO
    

    【讨论】:

    • except COMMIT TRANSACTION accepts a user-defined transaction name.... 但我没有给他交易的名称...这就是问题所在。 + 我不是在谈论 WORK 关键字。我在谈论提交与提交反式。
    • @Royi Namir:不,COMMIT 本身就是 COMMIT WORK。与命名交易无关:如果您确实命名了它,那么您没有在问题中提到它。对于名称,您必须明确使用COMMIT TRANSACTION SomeNameCOMMIT TRAN SomeName自行提交
    • 因此,如果我不使用任何命名事务,我总是可以单独使用 Commit。对吗?
    【解决方案2】:

    IF @@TRANCOUNT > 0 旨在检查有(至少)一个待处理事务 - if 必须与 ROLLBACKCOMMIT 一起使用,因为在没有任何事务打开的情况下执行这些指令会产生错误

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2018-10-31
      • 2010-09-16
      • 1970-01-01
      • 2019-01-03
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      相关资源
      最近更新 更多