Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere l'errore sql nella procedura memorizzata

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.