次の方法で共有


ERROR_LINE (Transact-SQL)

TRY...CATCH 構造の CATCH ブロックの実行を引き起こすエラーが発生した行番号を返します。

構文

ERROR_LINE()

戻り値の型

int

戻り値

CATCH ブロックで呼び出されると、次の値を返します。

  • エラーが発生した行番号
  • ストアド プロシージャまたはトリガ内でエラーが発生した場合には、ルーチン内の行番号

CATCH ブロックのスコープ外で呼び出された場合は、NULL を返します。

解説

この関数は、CATCH ブロックのスコープ内の任意の場所で呼び出すことができます。

ERROR_LINE は、呼び出された回数や CATCH ブロックのスコープ内のどこで呼び出されたかにかかわらず、エラーが発生した行番号を返します。これは、エラーが発生したステートメントの直後のステートメントまたは CATCH ブロックの最初のステートメントでエラー番号を返す、@@ERROR などの関数とは異なります。

入れ子になった CATCH ブロックでは、ERROR_LINE は、参照されている CATCH ブロックのスコープに固有のエラー行番号を返します。たとえば、TRY...CATCH 構造の CATCH ブロックに、入れ子になった TRY...CATCH 構造が含まれる場合があります。入れ子になった CATCH ブロック内では、ERROR_LINE は、入れ子になった CATCH ブロックを呼び出したエラーの行番号を返します。ERROR_LINE が外部の CATCH ブロックで実行されると、その CATCH ブロックを呼び出したエラーの行番号が返されます。

A. CATCH ブロックで ERROR_LINE を使用する

次のコードは、0 除算エラーを生成する SELECT ステートメントを示しています。エラーが発生した行番号が返されます。

USE AdventureWorks;
GO

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 ステートメントを示しています。エラーが発生した行番号と共に、エラーに関する情報が返されます。

USE AdventureWorks;
GO

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)

その他の技術情報

Transact-SQL のエラー情報の取得
Transact-SQL での TRY...CATCH の使用
RAISERROR の使用
データベース エンジン エラーの重大度

ヘルプおよび情報

SQL Server 2005 の参考資料の入手