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

Cách gặp lỗi sql trong thủ tục được lưu trữ

Đây là một phần của mẫu thủ tục được lưu trữ mà tôi sử dụng:

/*  CREATE PROCEDURE...  */

DECLARE
  @ErrorMessage   varchar(2000)
 ,@ErrorSeverity  tinyint
 ,@ErrorState     tinyint

/*  Additional code  */

BEGIN TRY

/*  Your code here  */

END TRY

BEGIN CATCH
    SET @ErrorMessage  = ERROR_MESSAGE()
    SET @ErrorSeverity = ERROR_SEVERITY()
    SET @ErrorState    = ERROR_STATE()
    RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)

    BREAK
END CATCH

/*  Further cleanup code  */

Các khối Try / Catch có thể phức tạp nhưng triệt để hơn nhiều so với lỗi @@. Quan trọng hơn, bạn có thể sử dụng các hàm error_xxx () khác nhau bên trong chúng. Ở đây, tôi lưu trữ thông báo lỗi thích hợp trong biến @ErrorMessage, cùng với đủ dữ liệu khác để phát hiện lại lỗi. Từ đây, bất kỳ tùy chọn nào đều có sẵn; bạn có thể đặt @ErrorMessage thành một biến đầu ra, kiểm tra và xử lý các lỗi cụ thể hoặc xây dựng các thông báo lỗi của riêng bạn (hoặc điều chỉnh các thông báo lỗi hiện có để rõ ràng hơn - bạn có thể khó chịu khi biết tần suất bạn muốn làm điều đó). Các tùy chọn khác sẽ trình bày các món đồ nhỏ.

Một số điều cần lưu ý:trong một số trường hợp, SQL sẽ ném hai thông báo lỗi trở lại ... và error_message() sẽ chỉ bắt cái cuối cùng, thường có nội dung như "cố gắng tạo đối tượng không thành công", với lỗi thực sự được đưa ra trong thông báo lỗi đầu tiên. Đây là nơi tạo ra thông báo lỗi của riêng bạ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. Hàm trong SQL Server 2008 tương tự như hàm GREATEST trong mysql?

  2. SQL LocalDB so với SQL Server CE

  3. Truy vấn SQL để lấy bản ghi cuối cùng của mỗi phút

  4. Sử dụng kết quả của thủ tục đã lưu trữ trong câu lệnh Chọn

  5. Điều kiện có điều kiện trong SQL Server