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
- Lỗi cú pháp (Syntax errors)
- 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