Megosztás a következőn keresztül:


ERROR_PROCEDURE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Ez a függvény annak a tárolt eljárásnak vagy eseményindítónak a nevét adja vissza, ahol hiba történik, ha ez a hiba egy CATCH szerkezet blokkjának TRY...CATCH végrehajtását okozta.

  • Az SQL Server 2017 (14.x) és újabb verziói visszatérnek schema_name.stored_procedure_name
  • AZ SQL Server 2016 (13.x) és az Azure SQL Database visszatérése stored_procedure_name

Transact-SQL szintaxis konvenciók

Szemantika

ERROR_PROCEDURE ( )

Visszatérési típusok

Nvarchar(128)

Visszaadott érték

Blokk meghívása CATCH esetén annak a tárolt eljárásnak vagy eseményindítónak a nevét adja vissza, ERROR_PROCEDURE amelyből a hiba származik.

ERROR_PROCEDURE visszaadja NULL , ha a hiba nem egy tárolt eljáráson vagy eseményindítón belül történt.

ERROR_PROCEDURE akkor ad NULL vissza, ha a meghívás egy blokk hatókörén kívül esik CATCH .

Megjegyzések

ERROR_PROCEDURE a blokk hatókörén CATCH belül bárhol támogatja a hívásokat.

ERROR_PROCEDURE Visszaadja annak a tárolt eljárásnak vagy eseményindítónak a nevét, ahol hiba történik, függetlenül attól, hogy hányszor fut, vagy hol fut a CATCH blokk hatókörén belül. Ez az eredmény ellentétben áll egy olyan függvénnyel, mint @@ERRORa , amely csak egy hibaszámot ad vissza az utasításban, közvetlenül azt követően, amely hibát okoz.

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

Egy. ERROR_PROCEDURE használata CATCH blokkban

Ez a példa egy tárolt eljárást mutat be, amely osztva nullával hibát okoz. ERROR_PROCEDURE visszaadja annak a tárolt eljárásnak a nevét, ahol a hiba történt.

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

Itt van az eredmények összessége.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. ERROR_PROCEDURE használata CATCH blokkban más hibakezelő eszközökkel

Ez a példa egy tárolt eljárást mutat be, amely osztva nullával hibát okoz. A tárolt eljárás nevével együtt, ahol a hiba történt, a tárolt eljárás a hibára vonatkozó információkat ad vissza.

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

Itt van az eredmények összessége.

-----------

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