Ví dụ đơn giản về TRY … CATCH
Đầu tiên, hãy xem xét một ví dụ đơn giản phát sinh lỗi
Sau khi thực thi câu lệnh, ta thu được kết quả
Lỗi đọc thông tin hàm
Dưới đây là một số hàm cung cấp thông tin về lỗi vừa phát sinh
Sử dụng TRY … CATCH with TRANSACTION
Ta có thể sử dụng kết hợp TRY … CATCH with TRANSACTION block. Bên trong khối GIAO DỊCH, lệnh thao tác với dữ liệu được đặt trong khối TRY để khi có bất kỳ lỗi nào xảy ra, chương trình có thể bắt được và xử lý
Trước tiên, ta chuyển vào làm việc trong cơ sở dữ liệu tempdb
Sau khi thực hiện các lệnh trên, ta có kết quả bảng dữ liệu như sau
Use TRANSACTION to update a data series
Sau khi thực hiện xong, ta thử truy vấn lại bảng T1, kết quả truy vấn vẫn giống như trước khi thực hiện GIAO DỊCH (do TRANSACTION bị lỗi nên đã ROLLBACK toàn bộ)
Sử dụng TRY … CATCH with PROCEDURE
Trong ví dụ này, ta build Stored Procedure có sử dụng khối lệnh TRY … CATCH để bắt và xử lý lỗi. The 2 table A and B was started as after
Kết quả thực thi lệnh tạo bảng A
Lệnh tạo bảng B
Kết quả thực thi lệnh tạo bảng B
Create STORED PROCEDURE xóa bản ghi trong A as after
Use this STORED PROCEDURE to delete a writing of A
Error message as after
Để có thể bắt và xử lý lỗi này ngay bên trong STORED PROCEDURE, ta cần sử dụng khối lệnh TRY … CATCH … Chỉnh sửa STORED PROCEDURE hiện tại để bổ sung TRY … CATCH
Gọi thủ tục và bắt lỗi nếu có
Kết quả thực thi lệnh gọi thủ tục trên
Muốn hiểu giá trị của các thông số Msg. 547, Cấp độ. 16, Nhà nước. 0,… hãy đọc phần tiếp theo của bài viết RAISEERROR ở bên dưới
Sử dụng lệnh RAISEERROR để phát sinh lỗi
Bảng dữ liệu bảng lưu danh sách sinh viên với dữ liệu mẫu như sau
And a STORED PROCEDURE có tên insertStudent dùng để chèn thêm Student mới vào bảng
Khi chèn dữ liệu, ta nhận thấy rằng mã sinh viên (trường rollno) phải có đúng 7 ký tự, bên ngoài tên của sinh viên (tên đầy đủ của trường) không được để trống. Trong trường hợp người dùng nhập dữ liệu sai, ta cần phát thông báo lỗi để người dùng biết và nhập lại dữ liệu đúng. Khi đó, ta sử dụng câu lệnh RAISE ERROR như sau
Lưu ý giá trị SEVERITY phải lớn hơn 10 thì lệnh TRY … CATCH bên dưới mới bắt được lỗi
Khi đó, ta nhận được thông báo lỗi
Thông tin và cách sử dụng các tham số trong lời gọi RAISERROR tham khảo trong tài liệu MS SQLServer