適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
この関数では、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
参照
試みる。。。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)