ERROR_LINE (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

この関数では、TRY...CATCH 構文の CATCH ブロックが実行される原因となったエラーが発生した行番号が返されます。

Transact-SQL 構文表記規則

構文

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)