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