Ecco parte di un modello di stored procedure che utilizzo:
/* 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 */
I blocchi Try/Catch possono essere complicati ma sono molto più completi di @@error. Ancora più importante, puoi usare le varie funzioni error_xxx() al loro interno. Qui, memorizzo il messaggio di errore corretto nella variabile @ErrorMessage, insieme ad altri dati sufficienti per sollevare nuovamente l'errore. Da qui, è disponibile un numero qualsiasi di opzioni; potresti rendere @ErrorMessage una variabile di output, testare e gestire errori specifici o creare i tuoi messaggi di errore (o modificare quelli esistenti per essere più chiari:potresti irritarti scoprendo quanto spesso vorrai farlo). Altre opzioni si presenteranno.
Qualcosa a cui prestare attenzione:in alcune situazioni, SQL genererà due messaggi di errore uno dopo l'altro... e error_message()
catturerà solo l'ultimo, che di solito dice qualcosa come "tentativo di creazione dell'oggetto non riuscito", con il vero errore fornito nel primo messaggio di errore. È qui che entra in gioco la creazione del tuo messaggio di errore.