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

SQL Server:Rethrow ngoại lệ với số ngoại lệ ban đầu

Bạn có thể ném lại nó như thế này:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Tuy nhiên, bạn rất có thể mất ý nghĩa vì phần giữ chỗ% s etc trong các hàng sys.messages cho ERROR_NUMBER ()

Bạn có thể làm điều gì đó như thế này để bao gồm số và gửi lại tin nhắn ban đầu

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

5 ký tự đầu tiên là số ban đầu.

Nhưng nếu bạn có mã lồng nhau, thì bạn sẽ kết thúc bằng "Văn bản lỗi 00123 00456".

Cá nhân tôi chỉ xử lý các số SQL Exception để tách lỗi của tôi (50000) khỏi lỗi Công cụ (ví dụ:thiếu tham số) trong đó mã của tôi không chạy.

Cuối cùng, bạn có thể chuyển nó ra giá trị trả về.

Tôi đã hỏi một câu hỏi về điều này: Xử lý lỗi SQL Server:ngoại lệ và hợp đồng máy khách-cơ sở dữ liệu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server DRI (ON DELETE CASCADE) có chậm không?

  2. Cách lấy số đúng / sai từ một trường bit thành hai cột riêng biệt

  3. bcp:Error =[Microsoft] [SQL Server Native Client 10.0] Dữ liệu chuỗi, cắt ngắn bên phải

  4. Trình tạo dữ liệu cho máy chủ SQL?

  5. Báo cáo cục bộ so với báo cáo Máy chủ trong kiểm soát trình xem Báo cáo ASP .Net