Hier is een deel van een sjabloon voor opgeslagen procedures dat ik gebruik:
/* 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-blokken kunnen lastig zijn, maar zijn veel grondiger dan @@error. Wat nog belangrijker is, u kunt de verschillende error_xxx()-functies erin gebruiken. Hier sla ik de juiste foutmelding op in variabele @ErrorMessage, samen met voldoende andere gegevens om de fout opnieuw op te heffen. Vanaf hier is een willekeurig aantal opties beschikbaar; je kunt @ErrorMessage een uitvoervariabele maken, specifieke fouten testen en afhandelen, of je eigen foutmeldingen maken (of de bestaande aanpassen om duidelijker te zijn - je kunt geïrriteerd raken als je erachter komt hoe vaak je dat wilt doen). Andere opties zullen zich presenteren.
Iets om op te letten:in sommige situaties gooit SQL twee foutmeldingen achter elkaar... en error_message()
zal alleen de laatste vangen, die meestal iets zegt als "poging om object te maken is mislukt", met de echte fout in de eerste foutmelding. Dit is waar het maken van uw eigen foutmelding van pas komt.