Giải phẫu lỗi và lỗi không bắt được

Giao dịch và Xử lý lỗi trong SQL Server

Miriam Antona

Software Engineer

Giải phẫu lỗi

INSERT INTO products (product_name, stock, price)
    VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'. 
Cannot insert duplicate key in object 'dbo.products'. 
The duplicate key value is (Trek Powerfly 5 - 2018).
Giao dịch và Xử lý lỗi trong SQL Server

Giải phẫu lỗi

Mã lỗi

Một thông báo lỗi làm nổi bật chữ "Msg 2627", tương ứng với mã lỗi.

  • Lỗi SQL: 1–49999
  • Lỗi tự định nghĩa: từ 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Giao dịch và Xử lý lỗi trong SQL Server

Giải phẫu lỗi

Mức độ nghiêm trọng

Một thông báo lỗi làm nổi bật chữ "Level 14", tương ứng với mức độ nghiêm trọng của lỗi.

  • 0–10: thông tin
  • 11–16: lỗi người dùng có thể sửa (vi phạm ràng buộc, v.v.)
  • 17–24: lỗi khác (sự cố phần mềm, lỗi nghiêm trọng)
Giao dịch và Xử lý lỗi trong SQL Server

Giải phẫu lỗi

Trạng thái (State)

Một thông báo lỗi làm nổi bật chữ "State 1", tương ứng với trạng thái của lỗi.

  • 1: khi SQL Server hiển thị lỗi
  • 0–255: lỗi tự định nghĩa
Giao dịch và Xử lý lỗi trong SQL Server

Giải phẫu lỗi

Dòng (Line)

Một thông báo lỗi làm nổi bật chữ "Line 1", tương ứng với dòng xảy ra lỗi.

Thủ tục (Procedure)

Một thông báo lỗi làm nổi bật chữ "Procedure Insert_product", tương ứng với tên stored procedure nơi xảy ra lỗi.

Giao dịch và Xử lý lỗi trong SQL Server

Lỗi không bắt được

  • Mức nghiêm trọng < 11 (11–19 có thể bắt)

  • Mức nghiêm trọng ≥ 20 làm ngắt kết nối

  • Lỗi biên dịch: đối tượng/cột không tồn tại

Giao dịch và Xử lý lỗi trong SQL Server

Lỗi không bắt được - Ví dụ lỗi biên dịch

BEGIN TRY
    SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
    SELECT 'You are in the CATCH block' AS message;
END CATCH
Msg 207, Level 16, State 1, Line 2
Invalid column name 'non_existent_column'.
Giao dịch và Xử lý lỗi trong SQL Server

Ayo berlatih!

Giao dịch và Xử lý lỗi trong SQL Server

Preparing Video For Download...