Compartir a través de


ERROR_NUMBER (Transact-SQL)

Devuelve el número de error del error que ha provocado la ejecución del bloque CATCH de una construcción TRY…CATCH.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

ERROR_NUMBER ( )

Tipos de valor devueltos

int

Valor devuelto

Si se llama en un bloque CATCH, se devuelve el número de error del mensaje de error que ha provocado la ejecución del bloque CATCH.

Devuelve NULL si se llama fuera del ámbito de un bloque CATCH.

Comentarios

Se puede llamar a esta función desde cualquier parte del ámbito de un bloque CATCH.

ERROR_NUMBER devuelve el número de error con independencia de las veces que se ejecuta o de la parte donde se ejecuta en el ámbito del bloque CATCH. No ocurre lo mismo con @@ERROR, que sólo devuelve el número de error en la instrucción inmediatamente posterior a la que provoca un error o la primera instrucción de un bloque CATCH.

En los bloques CATCH anidados, ERROR_NUMBER devuelve el número de error específico para el ámbito del bloque CATCH donde se hace referencia a él. Por ejemplo, el bloque CATCH de una construcción TRY...CATCH externa puede tener una construcción TRY...CATCH anidada. En el bloque CATCH anidado, ERROR_NUMBER devuelve el número del error que ha invocado el bloque CATCH anidado. Si ERROR_NUMBER se ejecuta en el bloque CATCH externo, devuelve el número del error que ha invocado el bloque CATCH.

Ejemplos

A. Usar ERROR_NUMBER en un bloque CATCH

El siguiente ejemplo de código muestra una instrucción SELECT que genera un error de división por cero. Se devuelve el número de error.

USE AdventureWorks2008R2;
GO

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

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

El siguiente ejemplo de código muestra una instrucción SELECT que genera un error de división por cero. Además del número de error, se devuelve información relacionada con el error.

USE AdventureWorks2008R2;
GO

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