在使用提交之前退出存储过程有害吗?

Gix*_*ita 5 t-sql sql-server

我试着寻找这个,但我没找到任何东西.如果我有类似的东西:

CREATE PROCEDURE QQ
AS

BEGIN TRANSACTION

BEGIN TRY

    -- return early and skip commit here
    IF (Condition = true)
      RETURN 0

    COMMIT TRANSACTION

END TRY

BEGIN CATCH

    ROLLBACK

END CATCH
Run Code Online (Sandbox Code Playgroud)

交易会怎样?

JNK*_*JNK 6

它会保持打开状态COMMIT,直到你,ROLLBACK或连接关闭并且spid被杀死.

这将阻止其他进程并导致各种其他问题.

通常情况下,总是在您的CATCH区块中运行如下所示的检查,以确保您干净地关闭.

IF @@TRANCOUNT > 0
ROLLBACK
Run Code Online (Sandbox Code Playgroud)

要么

WHILE @@Trancount > 0
BEGIN
   ROLLBACK
END
Run Code Online (Sandbox Code Playgroud)