Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

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

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

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
'Петров не найден'