ERROR_LINE (Transact-SQL)

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

Синтаксис

ERROR_LINE()

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

При вызове в блоке 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.

Возвращаемый тип

int

Примеры

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

В коде следующего примера приведена инструкция 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

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

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

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

В коде следующего примера приведена инструкция 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
Использование конструкции TRY...CATCH в языке Transact-SQL
Использование инструкции RAISERROR
Уровни серьезности ошибок ядра СУБД

Справка и поддержка

Получение помощи по SQL Server 2005