ERROR_MESSAGE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Esta función devuelve el texto del mensaje del error que ha provocado la ejecución del bloque CATCH de una construcción TRY…CATCH.

Convenciones de sintaxis de Transact-SQL

Sintaxis

ERROR_MESSAGE ( )   

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulta la Documentación de versiones anteriores.

Tipos de valor devuelto

nvarchar(4000)

Valor devuelto

Cuando se llama en un bloque CATCH, ERROR_MESSAGE devuelve el texto completo del mensaje de error que ha provocado la ejecución del bloque CATCH. En el texto se incluyen los valores proporcionados para los parámetros sustituibles, como las longitudes, los nombres de objeto o las horas.

ERROR_MESSAGE devuelve NULL si se llama desde fuera del ámbito de un bloque CATCH.

Observaciones

ERROR_MESSAGE admite llamadas en cualquier lugar del ámbito de un bloque CATCH.

ERROR_MESSAGE devuelve un mensaje de error relevante, con independencia de cuántas veces se ejecute o de dónde se ejecute dentro del ámbito del bloque CATCH. Esto contrasta con funciones como @@ERROR, que solo devuelve un número de error en la instrucción inmediatamente posterior a la que produjo el error.

En los bloques CATCH anidados, ERROR_MESSAGE devuelve el mensaje de error específico del ámbito del bloque CATCH al que hace referencia ese bloque CATCH. Por ejemplo, el bloque CATCH de una construcción TRY...CATCH externa podría tener una construcción TRY...CATCH interna. Dentro de ese bloque interno CATCH, ERROR_MESSAGE devuelve el mensaje de error que invocó el bloque CATCH interno. Si ERROR_MESSAGE se ejecuta en el bloque CATCH externo, devuelve el mensaje de error que invocó ese bloque CATCH externo.

Ejemplos

A. Usar ERROR_MESSAGE en un bloque CATCH

En este ejemplo se muestra una instrucción SELECT que genera un error de división por cero. El bloque CATCH devuelve el mensaje de error.

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

El conjunto de resultados es el siguiente:

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

B. Usar ERROR_MESSAGE en un bloque CATCH con otras herramientas de control de errores.

En este ejemplo se muestra una instrucción SELECT que genera un error de división por cero. Junto con el mensaje de error, el bloque CATCH devuelve información sobre ese error.

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  

El conjunto de resultados es el siguiente:

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure  ErrorLine  ErrorMessage
----------- ------------- ----------- --------------- ---------- ----------------------------------
8134        16            1           NULL            4          Divide by zero error encountered.

(1 row(s) affected)

Consulte también

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Referencia de errores y eventos del motor de base de datos