Ado - хРАНИМЫЕ пРОЦЕДУРЫ - вОЗВРАТ оШИБОК
Программа для помещения данных в таблицу программа на C Builder зовёт хранимую процедуру. (sp->ExecSql();)
Хранимая процедура выполняет вставку данных в таблицу и ДОЛЖНА возвращать значение (@Err int OUTPUT)
Для таблицы на вставку и обновление есть триггер. Триггер ДОЛЖЕН возвращать ошибку по RAISERROR(50001,18,1) with seterror в переменной @@ERROR.
а затем эту ошибку (если её сгенерировал триггер)надо вернуть в программу.
1. Триггер ГЕНЕРИРУЕТ ошибку, но почему-то ошибка не передаётся в хранимую процедуру
2. хранимая процедура после исполнения команды INSERT INTO (которая собственно и запускает триггер) не выполняет НИ ОДНОЙ команды (типа SET @Err=@@ERROR и SELECT @Err) такое впечатление, что после исполнения триггера ВСЯ программа хранимой поцедуры завершает свою работу...
3. ну и соответственно, если после INSERT INTO не исполняется SET @Err=@@ERROR, то и @Err int OUTPUT не возвращает ничего...
КАК ОШИБКУ, СГЕНЕРИРОВАННУЮ ТРИГГЕРОМ, ВЕРНУТЬ В ПРОГРАММУ
Цитата:
Originally posted by Drew
КАК ОШИБКУ, СГЕНЕРИРОВАННУЮ ТРИГГЕРОМ, ВЕРНУТЬ В ПРОГРАММУ
КАК ОШИБКУ, СГЕНЕРИРОВАННУЮ ТРИГГЕРОМ, ВЕРНУТЬ В ПРОГРАММУ
Попробуй в процедуре до того как сработает триггер установить @Err к примеру в 1, а после выпролнения триггера выставить @Err например в 0. Таким образом если @Err=0 тогда ошибки нет, иначе ошибка. Хотя если мне не изменяет память, то хранимая процедура выполняется в одну транзакцию, следовательно если что-то не сработало тогда вся транзакция откатывается.