分享方式:


ERROR_PROCEDURE (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

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

  • SQL Server 2017 到 目前的版本 傳回 schema_name.stored_procedure_name
  • SQL Server 2016 傳回 stored_procedure_name

Transact-SQL 語法慣例

語法

ERROR_PROCEDURE ( )  

傳回型別

nvarchar(128)

傳回值

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

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

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

備註

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

不論執行多少次,或在 CATCH 區塊範圍內的哪個位置執行,ERROR_PROCEDURE 都會傳回預存程序或觸發程序的名稱。 這有別於 @@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)

另請參閱

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)