ERROR_PROCEDURE (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric
Esta función devuelve el nombre del procedimiento almacenado o del desencadenador en el que se produce un error, si ese error ha causado la ejecución de un bloque CATCH de una construcción TRY…CATCH.
- Desde SQL Server 2017 a la versión actual devuelve
schema_name.stored_procedure_name
- SQL Server 2016 devuelve
stored_procedure_name
Convenciones de sintaxis de Transact-SQL
Sintaxis
ERROR_PROCEDURE ( )
Tipos de valor devuelto
nvarchar(128)
Valor devuelto
Cuando se le llama en un bloque CATCH, ERROR_PROCEDURE
devuelve el nombre del desencadenador o el procedimiento almacenado en el que se originó el error.
ERROR_PROCEDURE
devuelve NULL si el error no se produjo en un procedimiento almacenado o un desencadenador.
ERROR_PROCEDURE
devuelve NULL si se llama desde fuera del ámbito de un bloque CATCH.
Observaciones
ERROR_PROCEDURE
admite llamadas en cualquier lugar del ámbito de un bloque CATCH.
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
. 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.
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
A. Utilizar 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. Utilizar 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)
Consulte también
sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)