“if @@trancount > 0 commit tran”是什么意思?

srg*_*ggd 3 sql-server transaction

请问这个操作是什么意思?

if @@trancount > 0 commit tran
Run Code Online (Sandbox Code Playgroud)

在那之后

SET IMPLICIT_TRANSACTIONS ON
Run Code Online (Sandbox Code Playgroud)

或者

SET IMPLICIT_TRANSACTIONS OFF
Run Code Online (Sandbox Code Playgroud)

尽管我在网上搜索了很多,但我不明白这一系列命令的含义。

小智 5

我认为有两个概念你需要理解:

  1. IF @@trancount > 0 COMMIT TRANSACTION

    这会检查脚本中是否仍有任何打开的事务,或者如果 IMPLICIT_TRANSACTIONS 处于打开状态,则该事务将会存在。如果在执行 COMMIT 之前不检查打开的事务,您将收到以下错误:

COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。

  1. 隐式交易

    为了简化这一点,当 IMPLICIT_TRANSACTIONS 为 ON 时,如果尚未打开任何事务,则在特定语句之前有一个不可见的 BEGIN TRANSACTION(请参阅此处的列表)。当 IMPLICIT_TRANSACTIONS 为 OFF 时,您的语句处于自动提交模式

如果您向我们提供代码示例,我们也许能够更具体地回答您的问题。您可以使用此代码来查看这些命令如何影响语句:

    /*
    SET IMPLICIT_TRANSACTIONS ON
    SET IMPLICIT_TRANSACTIONS OFF
    */
    
    
    --BEGIN TRANSACTION  --Uncomment if IMPLICIT_TRANSACTIONS is ON
    
    CREATE TABLE Test (col int)
    
    DROP TABLE Test
    
    SELECT @@TRANCOUNT
    
    BEGIN TRANSACTION
    
    SELECT @@TRANCOUNT
    
    COMMIT
    
    SELECT @@TRANCOUNT
    
    COMMIT
    
    SELECT @@TRANCOUNT
    
    --When IMPLICIT_TRANSACTIONS is ON, SQL will begin a new transaction count here, 
    --You need to explicitly end the transaction at the end
    CREATE TABLE Test (col int)
    
    DROP TABLE Test
    
    SELECT @@TRANCOUNT
    
    IF @@TRANCOUNT > 0
        COMMIT
    
    SELECT @@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)