ERROR_STATE (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Restituisce il numero di stato dell'errore che ha attivato l'esecuzione del blocco CATCH di un costrutto TRY...CATCH.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

ERROR_STATE ( )  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Tipi restituiti

int

Valore restituito

Se richiamata in un blocco CATCH, questa istruzione restituisce il numero di stato del messaggio di errore che ha attivato l'esecuzione del blocco CATCH.

Restituisce NULL se chiamata all'esterno dell'ambito di un blocco CATCH.

Commenti

Alcuni messaggi di errore possono essere generati in più punti del codice di Microsoft SQL Server Motore di database. L'errore 1105, ad esempio, può essere generato in risposta a numerose condizioni. A ogni condizione specifica che genera l'errore viene assegnato un codice di stato univoco.

Durante la visualizzazione di database contenenti la trattazione di problemi noti, ad esempio la Microsoft Knowledge Base, è possibile utilizzare il numero di stato per determinare se il problema registrato è uguale all'errore rilevato. Se, ad esempio, in un articolo della Knowledge Base viene trattato il messaggio di errore 1105 con stato 2 e il messaggio di errore 1105 restituito è associato allo stato 3, è possibile che la causa dell'errore rilevato sia diversa da quella descritta nell'articolo.

Il codice di stato di un errore consente al personale del Supporto Tecnico Clienti Microsoft per SQL Server di individuare la posizione del codice sorgente in cui è stato generato l'errore e di ottenere pertanto indicazioni aggiuntive utili per la diagnostica del problema.

È possibile richiamare ERROR_STATE da un qualsiasi punto nell'ambito di un blocco CATCH.

ERROR_STATE restituisce lo stato dell'errore indipendentemente dal numero di esecuzioni oppure dalla sua posizione di esecuzione nell'ambito del blocco CATCH. Questa caratteristica è diversa da quella di funzioni come, ad esempio, @@ERROR, che restituisce solo il numero di errore nell'istruzione subito dopo quella che ha provocato un errore oppure nella prima istruzione di un blocco CATCH.

Nei blocchi CATCH nidificati l'istruzione ERROR_STATE restituisce lo stato di errore specifico dell'ambito del blocco CATCH contenente il riferimento a essa. Ad esempio, il blocco CATCH di un costrutto esterno TRY...CATCH potrebbe includere un costrutto TRY...CATCH nidificato. Nel blocco CATCH nidificato ERROR_STATE restituisce lo stato dell'errore che ha richiamato il blocco CATCH nidificato. Se ERROR_STATE viene eseguito in un blocco CATCH esterno, restituisce lo stato dell'errore che ha richiamato tale blocco CATCH.

Esempi

R. Utilizzo di ERROR_STATE in un blocco CATCH

Nell'esempio seguente viene illustrata un'istruzione SELECT che genera un errore di divisione per zero. Viene restituito lo stato dell'errore.

BEGIN TRY  
    -- Generate a divide by zero error  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT ERROR_STATE() AS ErrorState;  
END CATCH;  
GO  

B. Utilizzo di ERROR_STATE in un blocco CATCH con altri strumenti di gestione degli errori

Nell'esempio seguente viene illustrata un'istruzione SELECT che genera un errore di divisione per zero. Assieme allo stato dell'errore vengono restituite le informazioni relative all'errore stesso.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber,  
        ERROR_SEVERITY() AS ErrorSeverity,  
        ERROR_STATE() AS ErrorState,  
        ERROR_PROCEDURE() AS ErrorProcedure,  
        ERROR_LINE() AS ErrorLine,  
        ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

C. Utilizzo di ERROR_STATE in un blocco CATCH con altri strumenti di gestione degli errori

Nell'esempio seguente viene illustrata un'istruzione SELECT che genera un errore di divisione per zero. Assieme allo stato dell'errore vengono restituite le informazioni relative all'errore stesso.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber,  
        ERROR_SEVERITY() AS ErrorSeverity,  
        ERROR_STATE() AS ErrorState,  
        ERROR_PROCEDURE() AS ErrorProcedure,  
        ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

Vedere anche

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Guida di riferimento ad errori e eventi (motore di database)