Skip to main content

15. Error Handling

Objectives

  • Hiểu được cách thức hoạt động của error handling
  • Cách sử dụng TRY...CATCH
  • Cách sử dụng RAISEERROR, THROW
  • Cách sử dụng @@ERROR, ERROR_NUMBER, ERROR_SEVERITY, ERROR_STATE, ERROR_PROCEDURE, ERROR_LINE, ERROR_MESSAGE

Các loại lỗi trong SQL Server

  1. Lỗi cú pháp (Syntax errors)
  2. Lỗi thời gian chạy (Runtime errors)

Lỗi cú pháp (Syntax errors)

Là lỗi xảy ra khi câu lệnh SQL không được viết đúng cú pháp.

Lỗi thời gian chạy (Runtime errors)

Là lỗi xảy ra khi câu lệnh SQL được viết đúng cú pháp nhưng không thể thực thi được do sai logic hoặc do dữ liệu không hợp lệ.

RAISERROR

Là câu lệnh dùng để tạo ra một lỗi do người dùng tự định nghĩa. Ví dụ: Tạo một lỗi do người dùng tự định nghĩa

RAISERROR('This is a custom error', 16, 1)

THROW

Là câu lệnh dùng để tạo ra một lỗi do người dùng tự định nghĩa. Được giới thiệu từ phiên bản SQL Server 2012. Do đơn giản hơn RAISERROR nên nên được ưu tiên sử dụng.

Ví dụ: Tạo một lỗi do người dùng tự định nghĩa

THROW 50000, 'This is a custom error', 1

Biến @@ERROR

Là một biến toàn cục, chứa mã lỗi của lỗi gần nhất xảy ra. Ví dụ:

SELECT 1/0
SELECT @@ERROR

Kết quả:

Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
8134

ERROR_NUMBER()

Là hàm trả về mã lỗi của lỗi gần nhất xảy ra.

ERROR_SEVERITY()

Là hàm trả về mức độ nghiêm trọng của lỗi gần nhất xảy ra.

ERROR_STATE()

Là hàm trả về trạng thái của lỗi gần nhất xảy ra.

ERROR_PROCEDURE()

Là hàm trả về tên của stored procedure hay trigger gây ra lỗi gần nhất xảy ra.

ERROR_LINE()

Là hàm trả về số dòng gây ra lỗi gần nhất xảy ra.

ERROR_MESSAGE()

Là hàm trả về thông điệp lỗi gần nhất xảy ra.

TRY...CATCH

Là cấu trúc dùng để bắt lỗi trong SQL Server. Được giới thiệu từ phiên bản SQL Server 2005. Ví dụ:

BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE()
END CATCH