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
語法
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)