Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server RAISERROR là gì?

Khi xảy ra sự cố trong T-SQL của bạn, bạn muốn khắc phục sự cố nhanh chóng với mức tối thiểu phải đào bới và làm gián đoạn người dùng. Các thông báo lỗi do SQL Server tạo có tính kỹ thuật cao và khó hiểu, điều này có thể gây khó khăn cho việc tách các vấn đề và có thể làm chậm thời gian giải quyết. May mắn thay, DBA có thể triển khai SQL Server RAISERROR như một giải pháp thay thế cho các thông báo lỗi SQL Server.

RAISERROR là một câu lệnh xử lý lỗi SQL Server tạo ra một thông báo lỗi và bắt đầu xử lý lỗi. RAISERROR có thể tham chiếu một thông báo do người dùng xác định được lưu trữ trong dạng xem danh mục sys.messages hoặc nó có thể xây dựng một thông báo động. Thông báo được trả về dưới dạng thông báo lỗi máy chủ đối với ứng dụng đang gọi hoặc khối CATCH được liên kết của cấu trúc TRY ... CATCH.

Có một số tình huống phù hợp để sử dụng câu lệnh RAISERROR:

  • Khắc phục sự cố mã Transact-SQL
  • Trả lại các thư có chứa văn bản thay đổi
  • Kiểm tra các giá trị dữ liệu
  • Khi bạn cần thực thi để chuyển từ khối TRY sang khối CATCH được liên kết hoặc trả lại thông tin lỗi từ khối CATCH cho người gọi

Điều quan trọng cần lưu ý là khi phát triển các ứng dụng mới, câu lệnh THROW hiện được ưu tiên hơn RAISERROR để xử lý lỗi. Nhưng hãy nói thêm về điều đó sau.

Tại sao sử dụng RAISERROR để xử lý lỗi máy chủ SQL?

Có hai lý do chính để chọn RAISERROR thay vì xử lý lỗi do SQL Server tạo:

  1. Các thông báo RAISERROR có thể tùy chỉnh theo mức độ nghiêm trọng và trạng thái
  2. Chúng có thể được viết bằng ngôn ngữ tự nhiên dễ hiểu

RAISERROR trả về thông báo lỗi cho ứng dụng ở cùng một định dạng được tạo bởi SQL Server Database Engine. Nó cho phép các nhà phát triển tạo thông báo lỗi của riêng họ, vì vậy bất kỳ ai đọc thông báo cũng có thể hiểu vấn đề thực tế là gì thay vì cố gắng giải mã thông báo lỗi kỹ thuật của SQL Server. Các nhà phát triển cũng có thể đặt mức độ nghiêm trọng, ID thông báo và trạng thái của riêng họ cho các thông báo lỗi.

Sử dụng RAISERROR với Cấu trúc TRY ... CATCH

TRY ... CATCH là một cấu trúc xử lý lỗi cho phép bạn thực thi mã trong phần TRY và xử lý các lỗi trong phần CATCH. Nói chung, TRY ... CATCH là một cách hiệu quả để xác định nhiều lỗi T-SQL, nhưng có một vài trường hợp ngoại lệ.

Hướng dẫn này cung cấp hướng dẫn chi tiết về cách sử dụng RAISERROR kết hợp với THỬ ... CATCH. Tác giả sử dụng một ví dụ cho thấy cách sử dụng RAISERROR bên trong một khối TRY để khiến việc thực thi chuyển đến khối CATCH được liên kết. Bên trong khối CATCH, tác giả trình bày cách sử dụng RAISERROR để trả về thông tin lỗi đã gọi khối CATCH. Đầu ra hiển thị ID thông báo, mức độ nghiêm trọng và trạng thái lỗi.

Câu lệnh xử lý lỗi RAISERROR so với THROW

RAISERROR đã được giới thiệu trong SQL Server 7.0 và là một cách hiệu quả để xử lý lỗi T-SQL trong nhiều năm. Nhưng nếu bạn đang phát triển các ứng dụng mới, Microsoft hiện khuyên bạn nên sử dụng câu lệnh THROW thay vì RAISERROR.

Khi các tổ chức cập nhật lên SQL Server 2012 trở lên, RAISERROR sẽ bị loại bỏ dần. Trên thực tế, RAISERROR không thể được sử dụng trong Thủ tục lưu trữ được biên dịch nguyên bản của SQL Server 2014. THROW được coi là một cải tiến so với RAISERROR vì nó dễ sử dụng hơn.

Tài liệu SQL Server của Microsoft phân tích sự khác biệt giữa câu lệnh xử lý lỗi RAISERROR và THROW như sau:

Tuyên bố RAISERROR

  • Nếu một msg_id được chuyển đến RAISERROR, ID phải được xác định trong sys.messages.
  • Tham số msg_str có thể chứa các kiểu định dạng printf.

Tham số mức độ nghiêm trọng chỉ định mức độ nghiêm trọng của ngoại lệ.

Tuyên bố THROW

  • Thông số error_number không cần phải được xác định trong sys.messages.
  • Tham số thông báo không chấp nhận định dạng kiểu printf.
  • Không có thông số mức độ nghiêm trọng. Mức độ nghiêm trọng của ngoại lệ luôn được đặt thành 16.

Mặc dù số ngày của RAISERROR có thể được đánh số, nhưng nó vẫn là một tùy chọn xử lý lỗi khả thi trên các phiên bản SQL Server cũ hơn. Microsoft đang thúc đẩy người dùng phiên bản SQL Server mới hơn (SQL SERVER 2012 trở lên) sử dụng câu lệnh THROW thay vì RAISERROR để triển khai xử lý lỗi. Microsoft vẫn chưa thông báo về việc ngừng sử dụng RAISERROR, nhưng có vẻ như nó sẽ sớm hơn là muộn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm một chuỗi trong một chuỗi trong SQL Server

  2. Làm cách nào để tôi có thể chèn 10 triệu bản ghi trong thời gian ngắn nhất có thể?

  3. Thống kê cơ sở dữ liệu cập nhật máy chủ SQL

  4. Giới thiệu về các hàm do người dùng xác định trong SQL Server

  5. Cách kết hợp ngày từ một trường với thời gian từ một trường khác - MS SQL Server