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

Jak získat chybu SQL v uložené proceduře

Zde je část šablony uložené procedury, kterou používám:

/*  CREATE PROCEDURE...  */

DECLARE
  @ErrorMessage   varchar(2000)
 ,@ErrorSeverity  tinyint
 ,@ErrorState     tinyint

/*  Additional code  */

BEGIN TRY

/*  Your code here  */

END TRY

BEGIN CATCH
    SET @ErrorMessage  = ERROR_MESSAGE()
    SET @ErrorSeverity = ERROR_SEVERITY()
    SET @ErrorState    = ERROR_STATE()
    RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)

    BREAK
END CATCH

/*  Further cleanup code  */

Bloky Try/Catch mohou být složité, ale jsou mnohem důkladnější než @@chyba. Ještě důležitější je, že v nich můžete použít různé funkce error_xxx(). Zde ukládám správnou chybovou zprávu do proměnné @ErrorMessage spolu s dostatkem dalších dat k opětovnému vyvolání chyby. Odtud je k dispozici libovolný počet možností; můžete vytvořit @ErrorMessage výstupní proměnnou, testovat a zpracovávat konkrétní chyby nebo vytvářet vlastní chybové zprávy (nebo upravit ty stávající, aby byly jasnější – můžete být naštvaní, když zjistíte, jak často to budete chtít dělat). Další možnosti se zobrazí samy.

Něco, na co si dát pozor:v některých situacích SQL zobrazí dvě chybové zprávy zády k sobě... a error_message() zachytí pouze poslední, která obvykle říká něco jako "pokus o vytvoření objektu se nezdařil", se skutečnou chybou uvedenou v první chybové zprávě. Zde přichází na řadu vytváření vlastní chybové zprávy.



  1. Jak naplánovat úlohy Oracle DBMS v okně

  2. Normalizovaná databáze - ONE to MANY - Prohledávejte všechny spojené datové sady

  3. Jak odstranit nepracovní dobu v Oracle

  4. CHYBA:ORA-02289:sekvence neexistuje - org.hibernate.exception.SQLGrammarException:nelze extrahovat ResultSet