ERROR_PROCEDURE (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance 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 を返します。
ERROR_PROCEDURE
は、CATCH ブロックの範囲外で呼び出されると、NULL を返します。
解説
ERROR_PROCEDURE
は、CATCH ブロックのスコープ内の任意の場所で呼び出すことができます。
実行された回数、または CATCH
ブロックのスコープ内で実行される場所に関係なく、ERROR_PROCEDURE
は、エラーが発生したストアド プロシージャまたはトリガーの名前を返します。 エラーが発生したステートメントの直後のステートメントのエラー番号のみを返す、@@ERROR などの関数とは対照的となります。
例: Azure Synapse Analytics、Analytics Platform System (PDW)
A. CATCH ブロックで ERROR_PROCEDURE を使用する
この例では、0 除算エラーを生成したストアド プロシージャを示します。 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 を使用する
この例では、0 除算エラーを生成したストアド プロシージャを示します。 ストアド プロシージャは、エラーが発生したストアド プロシージャの名前と共に、エラーに関する情報を返します。
-- 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)