Обработка ошибок

Previous  Top  Next

    
 

 

Для тог, чтобы проинформировать клиентское приложение об ошибке MS SQL Server использует функцию RAISERROR. При этом необходимо помнить, что:

Выполнение процедуры этой функцией не прерывается, транзакции не откатываются. Если в этом есть необходимость используйте ROLLBACK или RETURN
Ошибки с severity ниже 10 являются информационными и не вызывают исключения компонентов работы с данными.

При возникновении ошибки в каком-либо из операторов внутри пакета выполнение пакета продолжается, а функция @@ERROR возвращает код ошибки, который можно обработать.

 

Code:

INSERT MyTable (Name) VALUES ('Петров')

IF @@ERROR != 0

PRINT 'Ошибка вставки'.

 

 

 

После успешного оператора @@ERROR возвращает 0, поэтому, если значение ошибки может понадобиться впоследствии его надо сохранить в переменной.

Code:

DECLARE @ErrCode INTEGER

 

SET @ErrCode = 0

 

BEGIN TRANSACTION

INSERT MyTable (Name) VALUES ('Иванов')

IF @@ERROR != 0

@ErrCode = @@ERROR

 

INSERT MyTable (Name) VALUES ('Петров')

IF @@ERROR != 0

@ErrCode = @@ERROR

 

IF @ErrCode = 0

COMMIT

ELSE BEGIN

ROLLBACK

RAISERROR('Не удалось обновить данные', 16, 1)

END

 

 

 

Если оператор обновления данных не нашел ни одной записи ошибки не возникает. Проверить эту ситуацию можно при помощи функции @@ROWCOUNT, которая возвращает количество записей, обработанных последним оператором.

Code:

UPDATE MyTable

SET Name = 'Сидоров'

WHERE Name = 'Петров'

 

IF @@ROWCOUNT = 0

PRINT 'Петров не найден'