この記事で SQL Server のエラー処理について読んでいましたが、特定の状況で SQL Server の GOTO を使用してトランザクションをロールバックすることを提案しています。例:
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 でエラーを処理するための適切な方法ですか? そうでない場合、誰かがより良い代替案を提案できますか?