ERROR_PROCEDURE (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (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 块作用域内的任意位置调用。
无论 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)
另请参阅
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)