ERROR_LINE (Transact-SQL)

Область применения: yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр SQL Azure

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

Topic link iconСинтаксические обозначения в Transact-SQL

Синтаксис

ERROR_LINE ( )

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

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

int

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

При вызове в блоке CATCH функция ERROR_LINE возвращает:

  • номер строки, где произошла ошибка;
  • номер строки в подпрограмме, если ошибка возникла в хранимой процедуре или триггере;
  • значение NULL в случае вызова вне блока CATCH.

Remarks

Функцию ERROR_LINE можно вызывать в любом месте области действия блока CATCH.

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

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

Примеры

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

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

Б. Использование функции 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, вызывающая ошибку деления на ноль. Функция 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)