Możesz to zrobić ponownie w ten sposób:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
Jednak najprawdopodobniej stracisz znaczenie z powodu symboli zastępczych %s itp. w wierszach sys.messages dla ERROR_NUMBER()
Możesz zrobić coś takiego, aby dołączyć numer i ponownie wyrzucić oryginalną wiadomość
..
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
Pierwsze 5 znaków to oryginalna liczba.
Ale jeśli masz zagnieżdżony kod, otrzymasz „00123 00456 Error text”.
Osobiście zajmuję się tylko numerami wyjątków SQL, aby oddzielić moje błędy (50000) od błędów silnika (np. brakujące parametry), w których mój kod nie działa.
Na koniec możesz przekazać mu wartość zwracaną.
Zadałem pytanie na ten temat:Obsługa błędów SQL Server:wyjątki i umowa klient bazy danych