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

时间:2011-11-29 19:24:25

标签: sql-server tsql

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

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

交易会怎样?

2 个答案:

答案 0 :(得分:6)

它将保持打开状态,直到您COMMITROLLBACK或连接已关闭且该spid被杀死。

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

一般情况下,总是在CATCH区块中执行如下所示的检查,以确保您干净利落地关闭。

IF @@TRANCOUNT > 0
ROLLBACK

WHILE @@Trancount > 0
BEGIN
   ROLLBACK
END

答案 1 :(得分:1)

为了确保,我会在退出语句之前执行ROLLBACK。根据您的数据库软件,他们可以在退出时执行自动提交。