Неправильная практика использования GOTO SQL Server для обработки ошибок?

Я читал об обработке ошибок в SQL Server в этой статье, и они предлагают использовать GOTO SQL Server в определенных ситуациях для отката транзакции. Пример:

BEGIN TRAN
    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391'

    SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM

    UPDATE Publishers
    SET city = 'Calcutta', country = 'India'
    WHERE pub_id = '9999'

    SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM
COMMIT TRAN

PROBLEM:
IF (@intErrorCode <> 0) BEGIN
PRINT 'Unexpected error occurred!'
    ROLLBACK TRAN
END

Эта статья была написана почти 10 лет назад, и я слышал, что обычно использовать GOTO — плохая идея. Является ли приведенный выше метод обработки ошибок приемлемым для обработки ошибок в SQL Server? Если нет, может ли кто-нибудь предложить лучшую альтернативу?

8
задан Abe Miessler 21 June 2012 в 15:44
поделиться