sql >> Database >  >> RDS >> Sqlserver

SQL Server:Uitzondering opnieuw plaatsen met het oorspronkelijke uitzonderingsnummer

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



  1. Python psycopg2 wordt niet ingevoegd in postgresql-tabel

  2. hoe swap-waarden van twee rijen bij te werken met een enkele query

  3. Niet te verwaarlozen verschil in uitvoeringsplan met Oracle bij gebruik van jdbc Timestamp of Date

  4. Ajax verwijderen werkt niet in laravel 5.2