Обработка ошибок
Для тог, чтобы проинформировать клиентское приложение об ошибке MS SQL Server использует функцию RAISERROR. При этом необходимо помнить, что:•Выполнение процедуры этой функцией не прерывается, транзакции не откатываются. Если в этом есть необходимость – используйте ROLLBACK или RETURN•Ошибки с severity ниже 10 являются информационными и не вызывают исключения компонентов работы с данными.
При возникновении ошибки в каком-либо из операторов внутри пакета выполнение пакета продолжается, а функция @@ERROR возвращает код ошибки, который можно обработать.
IF @@ERROR != 0
PRINT 'Ошибка вставки'.
После успешного оператора @@ERROR возвращает 0, поэтому, если значение ошибки может понадобиться впоследствии – его надо сохранить в переменной.
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, которая возвращает количество записей, обработанных последним оператором.
SET Name = 'Сидоров'
WHERE Name = 'Петров'
IF @@ROWCOUNT = 0
PRINT 'Петров не найден'
Отправить комментарий