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