在巢狀 TRY...CATCH 中使用錯誤函式
你剛收到一批新的電動腳踏車進到你的店裡,所以需要更新庫存。
你想登記:收到 2 台「Trek Powerfly 5 - 2018」,每台價格 $3499.99;以及 3 台「New Power K- 2018」,每台 $1999.99。
你嘗試把這些產品插入資料庫,因為你以為它們是新款。不過你忘了,第一個型號其實已經有庫存了。幸好,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;
___ ___
___ ___