Вреден ли выход из хранимой процедуры перед использованием коммита? - PullRequest
5 голосов
/ 29 ноября 2011

Я пытался найти это, но ничего не нашел. Если у меня есть что-то вроде:

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 ]

6 голосов
/ 29 ноября 2011

Он будет оставаться открытым до тех пор, пока вы COMMIT, ROLLBACK или соединение не закроются и этот спид не будет уничтожен.

Это заблокирует другие процессы и вызовет все виды других проблем.

Как правило, всегда выполняйте проверку, как показано ниже, в своем блоке CATCH, чтобы убедиться, что вы закрылись чисто.

IF @@TRANCOUNT > 0
ROLLBACK

или

WHILE @@Trancount > 0
BEGIN
   ROLLBACK
END
1 голос
/ 29 ноября 2011

Просто чтобы быть уверенным, я выполню ROLLBACK, прежде чем вы выйдете из оператора. В зависимости от программного обеспечения вашей базы данных они могут выполнить автоматическую фиксацию при выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...