Ето част от шаблон за запомнена процедура, който използвам:
/* 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 */
Блоковете Try/Catch могат да бъдат трудни, но са много по-задълбочени от @@error. По-важното е, че можете да използвате различните функции error_xxx() в тях. Тук съхранявам правилното съобщение за грешка в променлива @ErrorMessage, заедно с достатъчно други данни, за да повдигна отново грешката. От тук са налични произволен брой опции; можете да направите @ErrorMessage изходна променлива, да тествате и обработвате конкретни грешки или да създавате свои собствени съобщения за грешки (или да коригирате съществуващите, за да бъдат по-ясни - може да се раздразните, когато разберете колко често искате да правите това). Ще се появят други опции.
Нещо, за което трябва да внимавате:в някои ситуации SQL ще изведе две съобщения за грешка едно след друго... и error_message()
ще хване само последния, който обикновено казва нещо като "опитът за създаване на обект е неуспешен", като истинската грешка е дадена в първото съобщение за грешка. Тук идва създаването на собствено съобщение за грешка.