ERROR_LINE (Transact-SQL)

Возвращает номер строки, в которой возникла ошибка, приведшая к активации блока CATCH конструкции TRY…CATCH.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

ERROR_LINE ( )

Тип возвращаемых данных

int

Возвращаемое значение

При вызове в блоке CATCH:

  • Возвращает номер строки, в которой возникла ошибка.

  • Возвращает номер строки в процедуре, если ошибка возникла в хранимой процедуре или триггере.

Возвращает значение NULL в случае вызова вне блока CATCH.

Замечания

Эта функция может быть вызвана в любом месте в пределах блока CATCH.

Функция ERROR_LINE возвращает номер строки, в которой возникла ошибка, независимо от того, сколько раз или в какой области блока CATCH она была вызвана. В этом ее отличие от таких функций, как @@ERROR, которые возвращают номер ошибки в той инструкции, которая непосредственно следует за инструкцией, вызвавшей ошибку, или же в первой инструкции блока CATCH.

Во вложенных блоках CATCH функция ERROR_LINE возвращает номер строки ошибки, связанной с тем блоком CATCH, в котором она была вызвана. Например, блок CATCH конструкции TRY…CATCH может содержать вложенную конструкцию TRY…CATCH. Внутри вложенного блока CATCH функция ERROR_LINE возвращает номер строки ошибки, вызвавшей вложенный блок CATCH. Если функция ERROR_LINE запущена во внешнем блоке CATCH, она возвращает номер строки ошибки, вызвавшей этот блок CATCH.

Примеры

А. Использование функции ERROR_LINE в блоке CATCH

В следующем примере кода приведена инструкция SELECT, формирующая ошибку деления на ноль. Возвращается номер строки, в которой возникла ошибка.

USE AdventureWorks2008R2;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO

Б. Использование функции ERROR_LINE в блоке CATCH с хранимой процедурой

В примере следующего кода приведена хранимая процедура, вызывающая ошибку деления на ноль. Функция 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

В. Использование функции ERROR_LINE в блоке CATCH с другими средствами обработки ошибок

В следующем примере кода приведена инструкция SELECT, формирующая ошибку деления на ноль. Вместе с номером строки, в которой возникла ошибка, возвращаются сведения, касающиеся этой ошибки.

USE AdventureWorks2008R2;
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