共用方式為


ERROR_PROCEDURE (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

如果該錯誤造成 CATCH 建構區塊 TRY...CATCH 執行,此函式會傳回發生錯誤的預存程式或觸發程序名稱。

  • SQL Server 2017 (14.x) 和更新版本會傳回 schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) 和 Azure SQL Database 傳回 stored_procedure_name

Transact-SQL 語法慣例

語法

ERROR_PROCEDURE ( )

傳回類型

nvarchar(128)

返回值

在區塊中 CATCH 呼叫時, ERROR_PROCEDURE 會傳回產生錯誤的預存程式或觸發程式名稱。

ERROR_PROCEDURE 如果錯誤未在預存程式或觸發程式內發生,則傳 NULL 回 。

ERROR_PROCEDURE NULL在區塊範圍CATCH之外呼叫 時,會傳回 。

備註

ERROR_PROCEDURE 支援在區塊範圍內 CATCH 的任何位置呼叫。

不論執行多少次,或在 ERROR_PROCEDURE 區塊範圍內的哪個位置執行,CATCH 都會傳回預存程序或觸發程序的名稱。 此結果與 類似 @@ERROR的函式形成對比,該函式只會傳回緊接在造成錯誤之函式之後的語句中錯誤號碼。

範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

A。 在 CATCH 區塊中使用ERROR_PROCEDURE

此範例會顯示產生除以零之錯誤的預存程序。 ERROR_PROCEDURE 會傳回發生錯誤之預存程序的名稱。

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

結果集如下所示。

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. 搭配其他錯誤處理工具,在 CATCH 區塊中使用ERROR_PROCEDURE

此範例會顯示產生除以零之錯誤的預存程序。 除了發生錯誤之預存程序的名稱,預存程序也會傳回錯誤的相關資訊。

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

結果集如下所示。

-----------

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