ERROR_LINE (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
この関数では、TRY...CATCH 構文の CATCH ブロックが実行される原因となったエラーが発生した行番号が返されます。
構文
ERROR_LINE ( )
返り値の種類
int
戻り値
CATCH ブロック内で呼び出されると、ERROR_LINE
は次の値を返します。
- エラーが発生した行番号
- ストアド プロシージャまたはトリガー内でエラーが発生した場合は、ルーチン内の行番号
- CATCH ブロックの範囲外で呼び出された場合は、NULL
解説
ERROR_LINE
は、CATCH ブロックのスコープ内の任意の場所で呼び出すことができます。
ERROR_LINE
はエラーが発生した行番号を返します。 これは、CATCH ブロックのスコープ内で ERROR_LINE
が呼び出された位置に関係なく、また ERROR_LINE
の呼び出し回数に関係なく発生します。 これは @@ERROR などの関数とは対照的です。 @@ERROR は、エラーが発生したステートメントの直後のステートメント、または CATCH ブロックの最初のステートメントでエラー番号を返します。
入れ子になった CATCH ブロックでは、ERROR_LINE
は、参照されている CATCH ブロックのスコープに固有のエラー行番号を返します。 たとえば、TRY...CATCH コンストラクトの CATCH ブロックに、入れ子になった TRY...CATCH コンストラクトが含まれる場合があります。 入れ子になった CATCH ブロック内では、ERROR_LINE
は、入れ子になった CATCH ブロックを呼び出したエラーの行番号を返します。 ERROR_LINE
が外部の CATCH ブロックで実行されると、その特定の CATCH ブロックを呼び出したエラーの行番号が返されます。
例
A. CATCH ブロックで ERROR_LINE を使用する
このコード例は、0 除算エラーを生成する SELECT
ステートメントを示しています。 ERROR_LINE
は、エラーが発生した行番号を返します。
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO
B. CATCH ブロックで ERROR_LINE をストアド プロシージャと一緒に使用する
この例では、0 除算エラーを生成したストアド プロシージャを示します。 ERROR_LINE
は、エラーが発生した行番号を返します。
-- 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_LINE() AS ErrorLine;
END CATCH;
GO
C. CATCH ブロックで ERROR_LINE を他のエラー処理ツールと一緒に使用する
このコード例は、0 除算エラーを生成する SELECT
ステートメントを示しています。 ERROR_LINE
は、エラーが発生した行番号と、そのエラー自体に関する情報を返します。
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
参照
TRY...CATCH (Transact-SQL)
sys.messages (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)