始める無料で始める

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
コードを編集して実行