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 AdventureWorks2012;
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 AdventureWorks2012;
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