Je kunt het misschien als volgt teruggooien:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
U verliest echter hoogstwaarschijnlijk betekenis door de %s etc placeholders in de sys.messages rijen voor ERROR_NUMBER()
Je zou zoiets als dit kunnen doen om het nummer op te nemen en het originele bericht terug te sturen
..
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 eerste 5 tekens zijn het originele nummer.
Maar als je geneste code hebt, krijg je "00123 00456 Error text".
Persoonlijk behandel ik alleen SQL Exception-nummers om mijn fouten (50000) te scheiden van Engine-fouten (bijv. ontbrekende parameters) waar mijn code niet wordt uitgevoerd.
Ten slotte zou je de retourwaarde kunnen doorgeven.
Ik heb hierover een vraag gesteld:SQL Server-foutafhandeling:uitzonderingen en het database-clientcontract