Sie können es möglicherweise so erneut werfen:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
Aufgrund der Platzhalter %s usw. in den sys.messages-Zeilen für ERROR_NUMBER()
verlieren Sie jedoch höchstwahrscheinlich an BedeutungSie könnten so etwas tun, um die Nummer einzuschließen und die ursprüngliche Nachricht erneut zu senden
..
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
Die ersten 5 Zeichen sind die Originalnummer.
Wenn Sie jedoch verschachtelten Code haben, erhalten Sie am Ende "00123 00456 Fehlertext".
Persönlich beschäftige ich mich nur mit SQL-Ausnahmenummern, um meine Fehler (50000) von Engine-Fehlern (z. B. fehlende Parameter) zu trennen, bei denen mein Code nicht ausgeführt wird.
Schließlich könnten Sie den Rückgabewert weitergeben.
Ich habe dazu eine Frage gestellt:SQL Server-Fehlerbehandlung:Ausnahmen und der Datenbank-Client-Vertrag