Compartir a través de


ERROR_PROCEDURE (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 nombre del procedimiento almacenado o desencadenador donde se produce un error, si ese error provocó la ejecución del CATCH bloque de una TRY...CATCH construcción.

  • SQL Server 2017 (14.x) y versiones posteriores devuelven schema_name.stored_procedure_name
  • Devolución de SQL Server 2016 (13.x) y Azure SQL Database stored_procedure_name

Convenciones de sintaxis de Transact-SQL

Sintaxis

ERROR_PROCEDURE ( )

Tipos de retorno

nvarchar(128)

Valor devuelto

Cuando se llama en un CATCH bloque, ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado o desencadenador en el que se originó el error.

ERROR_PROCEDURE devuelve NULL si el error no se produjo dentro de un procedimiento almacenado o desencadenador.

ERROR_PROCEDURE devuelve NULL cuando se llama fuera del ámbito de un CATCH bloque.

Observaciones

ERROR_PROCEDURE admite llamadas en cualquier parte del ámbito de un CATCH bloque.

ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado o desencadenador en el que se produce un error, con independencia de cuántas veces se ejecute o de dónde se ejecute dentro del ámbito del bloque CATCH. Este resultado contrasta con una función como @@ERROR, que solo devuelve un número de error en la instrucción inmediatamente después de la que provoca un error.

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

Un. Uso de ERROR_PROCEDURE en un bloque CATCH

En este ejemplo se muestra un procedimiento almacenado que genera un error de división por cero. ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado en el que se produjo el error.

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID('usp_ExampleProc', 'P') IS NOT NULL
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT 1 / 0;
GO

BEGIN TRY
-- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT ERROR_PROCEDURE() AS ErrorProcedure;
END CATCH;
GO

Este es el conjunto de resultados.

-----------

(0 row(s) affected)

ErrorProcedure
--------------------
usp_ExampleProc

(1 row(s) affected)

B. Uso de ERROR_PROCEDURE en un bloque CATCH con otras herramientas de control de errores

En este ejemplo se muestra un procedimiento almacenado que genera un error de división por cero. Junto con el nombre del procedimiento almacenado en el que se produjo el error, el procedimiento almacenado devuelve información sobre el error.

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID('usp_ExampleProc', 'P') IS NOT NULL
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT 1 / 0;
GO

BEGIN TRY
-- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
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,
           ERROR_LINE() AS ErrorLine;
END CATCH;
GO

Este es el conjunto de resultados.

-----------

(0 row(s) affected)

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

(1 row(s) affected)