Anda mungkin dapat menampilkannya kembali seperti ini:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
Namun, kemungkinan besar Anda kehilangan makna karena %s etc placeholder di baris sys.messages untuk ERROR_NUMBER()
Anda dapat melakukan sesuatu seperti ini untuk memasukkan nomor dan menampilkan kembali pesan aslinya
..
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 karakter pertama adalah angka asli.
Tetapi jika Anda memiliki kode bersarang, maka Anda akan mendapatkan "00123 00456 Error text".
Secara pribadi, saya hanya menangani nomor Pengecualian SQL untuk memisahkan kesalahan saya (50000) dari kesalahan Mesin (misalnya parameter yang hilang) di mana kode saya tidak berjalan.
Akhirnya, Anda bisa membagikan nilai kembaliannya.
Saya mengajukan pertanyaan tentang ini:Penanganan kesalahan SQL Server:pengecualian dan kontrak klien database