Her er en del af en lagret procedureskabelon, jeg bruger:
/* 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 */
Prøv/fang-blokke kan være vanskelige, men er meget mere grundige end @@error. Endnu vigtigere, du kan bruge de forskellige error_xxx()-funktioner i dem. Her gemmer jeg den korrekte fejlmeddelelse i variabel @ErrorMessage sammen med nok andre data til at genrejse fejlen. Herfra er et vilkårligt antal muligheder tilgængelige; du kan gøre @ErrorMessage til en outputvariabel, teste for og håndtere specifikke fejl eller bygge dine egne fejlmeddelelser (eller justere de eksisterende for at være tydeligere - du kan blive irriteret over at finde ud af, hvor ofte du vil gøre det). Andre muligheder vil præsentere dem.
Noget at holde øje med:I nogle situationer vil SQL sende to fejlmeddelelser ryg mod ryg... og error_message()
vil kun fange den sidste, som normalt siger noget som "forsøg på at oprette objekt mislykkedes", med den rigtige fejl angivet i den første fejlmeddelelse. Det er her, at bygge din egen fejlmeddelelse kommer ind.