Du kan muligvis gengive det sådan her:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
Men du mister højst sandsynligt en tabt mening på grund af %s osv. pladsholdere i sys.messages-rækkerne for ERROR_NUMBER()
Du kan gøre noget som dette for at inkludere nummeret og gengive den oprindelige besked
..
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
De første 5 tegn er det oprindelige nummer.
Men hvis du har indlejret kode, ender du med "00123 00456 fejltekst".
Personligt beskæftiger jeg mig kun med SQL-undtagelsesnumre for at adskille mine fejl (50000) fra motorfejl (f.eks. manglende parametre), hvor min kode ikke kører.
Endelig kunne du give det ud af returværdien.
Jeg stillede et spørgsmål om dette:SQL Server-fejlhåndtering:undtagelser og database-klientkontrakten