ERROR_PROCEDURE(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库

如果此错误导致 CATCH 构造块 TRY...CATCH 执行,则此函数将返回发生错误的存储过程或触发器的名称。

  • SQL Server 2017 (14.x) 及更高版本返回 schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) 和 Azure SQL 数据库返回 stored_procedure_name

Transact-SQL 语法约定

语法

ERROR_PROCEDURE ( )

返回类型

nvarchar(128)

返回值

在块中 CATCH 调用时, ERROR_PROCEDURE 返回生成错误的存储过程或触发器的名称。

ERROR_PROCEDURE 如果 NULL 错误未在存储过程或触发器中发生,则返回。

ERROR_PROCEDURENULL 块范围 CATCH 外调用时返回。

备注

ERROR_PROCEDURE 支持在块范围内的任何位置调用 CATCH

无论 ERROR_PROCEDURE 运行多少次或在 CATCH 块作用域内的任意位置运行,它都将返回出现错误的存储过程或触发器的名称。 此结果与类似 @@ERROR函数形成鲜明对比,该函数仅在导致错误的函数之后的语句中返回错误号。

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

答: 在 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)