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.