Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Ausnahme mit der ursprünglichen Ausnahmenummer erneut auslösen

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 Bedeutung

Sie 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