入れ子の TRY...CATCH でエラー関数を使う
あなたの店舗に新しい電動自転車が入荷したので、在庫を更新する必要があります。
1台あたり $3499.99 の Trek Powerfly 5 - 2018 を2台、1台あたり $1999.99 の New Power K- 2018 を3台、受領したことを登録したいとします。
それらが新モデルだと思い、製品をデータベースに挿入しようとします。しかし、最初の製品はすでに在庫にあることを忘れていました。幸いにも、products テーブルには製品名の一意性を求める制約があります。
そこで、挿入時に起こりうるエラーを制御するスクリプトを用意します。また、発生したエラーを errors テーブルに挿入し、その挿入で失敗した場合には、エラー番号とエラーメッセージを表示したいと考えています。
この演習はコースの一部です
SQL Server におけるトランザクションとエラー処理
演習の手順
- エラー処理全体を
CATCHブロックで囲んでください。 errorsテーブルに'Error inserting a product'を挿入し、この挿入を別のTRYブロックで囲んでください。- 入れ子のエラー処理を、さらに別の
CATCHブロックで囲んでください。 - 内側の
CATCHブロックで、エラー行とエラーメッセージを選択してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 2, 3499.99),
('New Power K- 2018', 3, 1999.99)
END TRY
-- Set up the outer CATCH block
___ ___
SELECT 'An error occurred inserting the product!';
-- Set up the inner TRY block
___ ___
-- Insert the error
INSERT INTO ___
VALUES ('Error inserting a product');
___ ___
-- Set up the inner CATCH block
___ ___
-- Show number and message error
SELECT
___ AS line,
___ AS message;
___ ___
___ ___