我试着寻找这个,但我没找到任何东西。如果我有类似的东西:
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
交易会怎样?
答案 0 :(得分:6)
它将保持打开状态,直到您COMMIT
,ROLLBACK
或连接已关闭且该spid被杀死。
这将阻止其他进程并导致各种其他问题。
一般情况下,总是在CATCH
区块中执行如下所示的检查,以确保您干净利落地关闭。
IF @@TRANCOUNT > 0
ROLLBACK
或
WHILE @@Trancount > 0
BEGIN
ROLLBACK
END
答案 1 :(得分:1)
为了确保,我会在退出语句之前执行ROLLBACK。根据您的数据库软件,他们可以在退出时执行自动提交。