適用於:SQL Server
Azure 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
語法
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)