ERROR_PROCEDURE (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
Diese Funktion gibt den Namen der gespeicherten Prozedur oder des Triggers zurück, an der bzw. an dem der Fehler auftritt, wenn durch diesen die Ausführung des CATCH-Blocks eines TRY...CATCH-Konstrukts verursacht wurde.
- SQL Server 2017 bis einschließlich der aktuellen Version gibt
schema_name.stored_procedure_name
zurück. - SQL Server 2016 gibt
stored_procedure_name
zurück.
Transact-SQL-Syntaxkonventionen
Syntax
ERROR_PROCEDURE ( )
Rückgabetypen
nvarchar(128)
Rückgabewert
Bei Aufruf in einem CATCH-Block gibt ERROR_PROCEDURE
den Namen der gespeicherten Prozedur oder des Triggers zurück, in der/dem der Fehler entstanden ist.
ERROR_PROCEDURE
gibt NULL zurück, wenn der Fehler nicht in einer gespeicherten Prozedur bzw. nicht in einem Trigger aufgetreten ist.
ERROR_PROCEDURE
gibt NULL zurück, wenn die Funktion außerhalb des Bereichs eines CATCH-Blocks aufgerufen wird.
Bemerkungen
ERROR_PROCEDURE
kann überall im Bereich eines CATCH-Blocks aufgerufen werden.
ERROR_PROCEDURE
gibt den Namen der gespeicherten Prozedur oder des Triggers, bei der bzw. bei dem ein Fehler auftritt, unabhängig davon zurück, wie oft die Funktion ausgeführt wurde oder wo sie im Bereich des CATCH
-Blocks ausgeführt wurde. Dies steht im Gegensatz zu Funktionen wie @@ERROR, die nur eine Fehlernummer in der Anweisung zurückgeben, die unmittelbar auf die Anweisung folgt, die einen Fehler auslöst.
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
A. Verwenden von ERROR_PROCEDURE in einem CATCH-Block
Dieses Beispiel zeigt eine gespeicherte Prozedur, in der ein Fehler aufgrund einer Division durch 0 (null) generiert wird. ERROR_PROCEDURE
gibt den Namen der gespeicherten Prozedur zurück, in der der Fehler aufgetreten ist.
-- 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
Hier sehen Sie das Ergebnis.
-----------
(0 row(s) affected)
ErrorProcedure
--------------------
usp_ExampleProc
(1 row(s) affected)
B. Verwenden von ERROR_PROCEDURE in einem CATCH-Block mit anderen Tools zur Fehlerbehandlung
Dieses Beispiel zeigt eine gespeicherte Prozedur, in der ein Fehler aufgrund einer Division durch 0 (null) generiert wird. Die gespeicherte Prozedur gibt Informationen zum Fehler zusammen mit dem Namen der gespeicherten Prozedur, in der der Fehler aufgetreten ist, zurück.
-- 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
Hier sehen Sie das Ergebnis.
-----------
(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)
Weitere Informationen
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)