sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:Kasta om undantag med det ursprungliga undantagsnumret

Du kanske kan kasta om det så här:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Men du förlorar sannolikt en förlorad mening på grund av %s etc platshållare i sys.messages-raderna för ERROR_NUMBER()

Du kan göra något så här för att inkludera numret och skicka tillbaka det ursprungliga meddelandet

..
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örsta 5 tecknen är det ursprungliga numret.

Men om du har kapslad kod kommer du att sluta med "00123 00456 Error text".

Personligen sysslar jag bara med SQL Exception-nummer för att skilja mina fel (50000) från motorfel (t.ex. saknade parametrar) där min kod inte körs.

Slutligen kan du skicka ut returvärdet.

Jag ställde en fråga om detta:SQL Server-felhantering:undantag och databas-klientkontraktet



  1. Oracle SQL - Fråga för att beräkna värden från flera tabeller

  2. INTE IN vs INTE FINNS

  3. Migrera från MySQL till PostgreSQL på Linux (Kubuntu)

  4. När stängs en anslutning när man anropar JooQ DSLContexts .close(), om alls?