Delen via


ERROR_PROCEDURE (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Deze functie retourneert de naam van de opgeslagen procedure of trigger waar een fout optreedt, als deze fout het CATCH blok van een TRY...CATCH constructie heeft veroorzaakt.

  • SQL Server 2017 (14.x) en latere versies retourneren schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) en Azure SQL Database retourneren stored_procedure_name

Transact-SQL syntaxis-conventies

Syntaxis

ERROR_PROCEDURE ( )

Retourtypen

Nvarchar(128)

Retourwaarde

Wanneer een CATCH blok wordt aangeroepen, ERROR_PROCEDURE retourneert u de naam van de opgeslagen procedure of trigger waarin de fout afkomstig is.

ERROR_PROCEDURE retourneert NULL als de fout niet is opgetreden binnen een opgeslagen procedure of trigger.

ERROR_PROCEDURE retourneert NULL wanneer aangeroepen buiten het bereik van een CATCH blok.

Opmerkingen

ERROR_PROCEDURE ondersteunt aanroepen binnen het bereik van een CATCH blok.

ERROR_PROCEDURE retourneert de naam van de opgeslagen procedure of trigger waar een fout optreedt, ongeacht hoe vaak deze wordt uitgevoerd of waar deze wordt uitgevoerd, binnen het bereik van het CATCH blok. Dit resultaat contrasteert met een functie zoals @@ERROR, die alleen een foutnummer in de instructie retourneert direct na de instructie die een fout veroorzaakt.

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

Eén. ERROR_PROCEDURE gebruiken in een CATCH-blok

In dit voorbeeld ziet u een opgeslagen procedure waarmee een fout tussen delen en nul wordt gegenereerd. ERROR_PROCEDURE retourneert de naam van de opgeslagen procedure waarin de fout is opgetreden.

-- 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 is het resultatenoverzicht.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Gebruik ERROR_PROCEDURE in een CATCH-blok met andere hulpprogramma's voor foutafhandeling

In dit voorbeeld ziet u een opgeslagen procedure waarmee een fout tussen delen en nul wordt gegenereerd. Samen met de naam van de opgeslagen procedure waar de fout is opgetreden, retourneert de opgeslagen procedure informatie over de fout.

-- 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 is het resultatenoverzicht.

-----------

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