Dela via


ERROR_PROCEDURE (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Den här funktionen returnerar namnet på den lagrade proceduren eller utlösaren där ett fel inträffar, om felet orsakade att byggblocket CATCHTRY...CATCH körs.

  • SQL Server 2017 (14.x) och senare versioner returnerar schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) och Azure SQL Database-retur stored_procedure_name

Transact-SQL syntaxkonventioner

Syntax

ERROR_PROCEDURE ( )

Returtyper

nvarchar(128)

Returvärde

När det anropas i ett CATCH block ERROR_PROCEDURE returneras namnet på den lagrade proceduren eller utlösaren där felet uppstod.

ERROR_PROCEDURE returnerar NULL om felet inte uppstod inom en lagrad procedur eller utlösare.

ERROR_PROCEDURE returnerar NULL när det anropas utanför omfånget för ett CATCH block.

Anmärkningar

ERROR_PROCEDURE stöder anrop var som helst inom omfånget för ett CATCH block.

ERROR_PROCEDURE returnerar namnet på den lagrade proceduren eller utlösaren där ett fel inträffar, oavsett hur många gånger det körs eller var det körs inom blockets CATCH omfång. Det här resultatet står i kontrast till en funktion som @@ERROR, som endast returnerar ett felnummer i -instruktionen omedelbart efter den som orsakar ett fel.

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

A. Använda ERROR_PROCEDURE i ett CATCH-block

Det här exemplet visar en lagrad procedur som genererar ett divide-by-zero-fel. ERROR_PROCEDURE returnerar namnet på den lagrade procedur där felet inträffade.

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

Här är resultatet.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Använda ERROR_PROCEDURE i ett CATCH-block med andra verktyg för felhantering

Det här exemplet visar en lagrad procedur som genererar ett divide-by-zero-fel. Tillsammans med namnet på den lagrade procedur där felet inträffade returnerar den lagrade proceduren information om felet.

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

Här är resultatet.

-----------

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