Sdílet prostřednictvím


ERROR_PROCEDURE (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Tato funkce vrátí název uložené procedury nebo triggeru, kde dojde k chybě, pokud tato chyba způsobila CATCH spuštění bloku konstruktoru TRY...CATCH .

  • SQL Server 2017 (14.x) a novější verze vrací schema_name.stored_procedure_name
  • Vrácení SQL Serveru 2016 (13.x) a Azure SQL Database stored_procedure_name

Transact-SQL konvence syntaxe

Syntaxe

ERROR_PROCEDURE ( )

Návratové typy

nvarchar(128)

Návratová hodnota

Při volání v CATCH bloku vrátí název uložené procedury nebo triggeru, ERROR_PROCEDURE ve kterém došlo k chybě.

ERROR_PROCEDURE vrátí NULL , pokud k chybě nedošlo v rámci uložené procedury nebo triggeru.

ERROR_PROCEDURE vrátí NULL , pokud je volána mimo rozsah CATCH bloku.

Poznámky

ERROR_PROCEDURE podporuje volání kdekoli v rozsahu CATCH bloku.

ERROR_PROCEDURE vrátí název uložené procedury nebo triggeru, ve kterém dojde k chybě, bez ohledu na to, kolikrát se spustí nebo kde běží v rámci oboru CATCH bloku. Tento výsledek kontrastuje s funkcí, jako @@ERRORje , která vrací pouze číslo chyby v příkazu bezprostředně za číslem, které způsobuje chybu.

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

A. Použití ERROR_PROCEDURE v bloku CATCH

Tento příklad ukazuje uloženou proceduru, která generuje chybu dělení nulou. ERROR_PROCEDURE vrátí název uložené procedury, kde došlo k chybě.

-- 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

Tady je soubor výsledků.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Použití ERROR_PROCEDURE v bloku CATCH s jinými nástroji pro zpracování chyb

Tento příklad ukazuje uloženou proceduru, která generuje chybu dělení nulou. Spolu s názvem uložené procedury, ve které došlo k chybě, vrátí uložená procedura informace o chybě.

-- 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

Tady je soubor výsledků.

-----------

(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)