TRY...CATCH 構造での @@TRANCOUNT の確認
口座 10 の名義人が抽選に当選し、$200 を受け取ります。口座 10 の current_balance にその $200 を加算するためのシンプルなスクリプトを用意しました。正しく書けたつもりですが、念のためコードを確認したいと思います。
実は、入金処理でうっかりミスをしています: SET current_balance = 'current_balance' + 200。'current_balance' を文字列で書いてしまい、エラーになります。
作成するスクリプトは、エラーが発生した場合に未完了の変更をすべて ROLLBACK するようにし、オープンなトランザクションがあるかを確認してください。すべて正常に実行された場合は、トランザクションを COMMIT します。その際もオープンなトランザクションがあるかを確認してください。
この演習はコースの一部です
SQL Server におけるトランザクションとエラー処理
演習の手順
- トランザクションを開始します。
- 演算のミスを修正します。
TRYブロック内で、トランザクションがあるかを確認してから COMMIT します。CATCHブロック内で、トランザクションがあるかを確認してから ROLLBACK します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
BEGIN TRY
-- Begin the transaction
___ ___;
-- Correct the mistake
UPDATE accounts SET current_balance = 'current_balance' + 200
WHERE account_id = 10;
-- Check if there is a transaction
IF ___ > 0
-- Commit the transaction
___ ___;
SELECT * FROM accounts
WHERE account_id = 10;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Check if there is a transaction
IF ___ > 0
-- Rollback the transaction
___ ___;
END CATCH