XACT_ABORT と THROW
あなたが働く銀行の最も裕福な顧客が、非営利団体に current_balance の 0.01% を寄付することにしました。あなたは顧客口座を更新するスクリプトの作成を任されていますが、対象は current_balance が $5,000,000 を超える口座だけです。銀行のディレクターからは、裕福な顧客が少なくとも 10 人いない場合はこの操作を実施しないようにと言われています。追加で顧客にインタビューしたいからです。
あなたはスクリプトを用意し、いくつかある方法の中から XACT_ABORT と THROW を組み合わせて使うことにしました。こうすることで、影響を受ける行数が 10 以下であればエラーを発生させ、トランザクションをロールバックできます。
この演習はコースの一部です
SQL Server におけるトランザクションとエラー処理
演習の手順
XACT_ABORTを適切に設定してください。- トランザクションを開始します。
- 影響を受けた行数が 10 以下の場合は、
THROW文を使ってエラー番号 55000 を投げてください。 - 影響を受けた行数が 10 を超える場合は、トランザクションを COMMIT します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Use the appropriate setting
SET XACT_ABORT ___;
-- Begin the transaction
___ ___;
UPDATE accounts set current_balance = current_balance - current_balance * 0.01 / 100
WHERE current_balance > 5000000;
IF @@ROWCOUNT <= 10
-- Throw the error
___ ___, 'Not enough wealthy customers!', 1;
ELSE
-- Commit the transaction
___ ___;