sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Znovu vyvolání výjimky s původním číslem výjimky

Možná to budete moci vrátit takto:

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

S největší pravděpodobností však ztratíte význam kvůli zástupným symbolům %s etc v řádcích sys.messages pro ERROR_NUMBER()

Mohli byste udělat něco takového, abyste vložili číslo a vrátili původní zprávu

..
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

Prvních 5 znaků je původní číslo.

Ale pokud máte vnořený kód, skončíte s "00123 00456 Error text".

Osobně se zabývám pouze čísly výjimek SQL, abych oddělil své chyby (50 000) od chyb enginu (např. chybějící parametry), kde můj kód neběží.

Nakonec mu můžete předat návratovou hodnotu.

Zeptal jsem se na toto:Zpracování chyb serveru SQL Server:výjimky a smlouva mezi databází a klientem



  1. PLS-00172:Při nastavování velké hodnoty řetězce na CLOB je vyvolána příliš dlouhá chyba řetězcového literálu

  2. MySQL:Aktualizujte více sloupců, pokud se jejich hodnota rovná

  3. Zpracování výjimek vnořených procedur Pl/SQL

  4. Jak předat uživatelsky definovaný typ tabulky jako parametr uložené procedury v C#