Udostępnij za pomocą


ERROR_PROCEDURE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Ta funkcja zwraca nazwę procedury składowanej lub wyzwalacza, gdy wystąpi błąd, jeśli ten błąd spowodował CATCH wykonanie bloku TRY...CATCH konstrukcji.

  • Program SQL Server 2017 (14.x) i nowsze wersje zwracają schema_name.stored_procedure_name
  • Zwracanie programu SQL Server 2016 (13.x) i usługi Azure SQL Database stored_procedure_name

Transact-SQL konwencje składni

Składnia

ERROR_PROCEDURE ( )

Typy zwracane

nvarchar(128)

Wartość zwracana

Po wywołaniu CATCH w bloku ERROR_PROCEDURE zwraca nazwę procedury składowanej lub wyzwalacza, w którym pochodzi błąd.

ERROR_PROCEDURE Zwraca NULL wartość , jeśli błąd nie wystąpił w procedurze składowanej lub wyzwalaczu.

ERROR_PROCEDURE funkcja zwraca NULL wartość po wywołaniu poza zakresem CATCH bloku.

Uwagi

ERROR_PROCEDURE obsługuje wywołania w dowolnym miejscu w zakresie CATCH bloku.

ERROR_PROCEDURE Zwraca nazwę procedury składowanej lub wyzwalacza, w którym występuje błąd, niezależnie od tego, ile razy jest uruchamiany, lub gdzie jest uruchamiany, w zakresie CATCH bloku. Ten wynik kontrastuje z funkcją taką jak @@ERROR, która zwraca tylko numer błędu w instrukcji bezpośrednio po tej, która powoduje błąd.

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

Odp. Używanie ERROR_PROCEDURE w bloku CATCH

W tym przykładzie przedstawiono procedurę składowaną, która generuje błąd dzielenia przez zero. ERROR_PROCEDURE Zwraca nazwę procedury składowanej, w której wystąpił błąd.

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

Oto zestaw wyników.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Używanie ERROR_PROCEDURE w bloku CATCH z innymi narzędziami do obsługi błędów

W tym przykładzie przedstawiono procedurę składowaną, która generuje błąd dzielenia przez zero. Wraz z nazwą procedury składowanej, w której wystąpił błąd, procedura składowana zwraca informacje o błędzie.

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

Oto zestaw wyników.

-----------

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