![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка ошибок внутри транзакции [MSSQL]
@dim © (2007-06-29 09:37:00)Есть некоторый код обрабатывающий ошибки в процедуре обновления записи в таблице
SELECT @Count = count(*) FROM Operation
WHERE OperationName = @name
AND MakeKod = @makekod
IF @Count>1 --произошла ошибка
BEGIN
raiserror 13000 'Повторяющееся значение атрибута'
ROLLBACK TRAN
return -100
END
работает нормально. Но Почему - то сообщение в приложение не приходит. В чем причина?
sniknik (2007-07-05 11:38:00) [1]а не лучше ли просто сделать уникальный индекс по этим полям, чем вообще чтото городить?
clickmaker (2007-07-05 10:59:00) [2]
> Каким образом
if exists (select * from Operation
WHERE OperationName = @name
AND MakeKod = @makekod )
then
raiserror 40001 'Повторяющееся значение атрибута'
else
update...
dimaL (2007-07-05 10:19:00) [3]
> а почему повторяющееся значение выясняется "задним числом"
> - селектом?
> Не проще ли перед обновлением проверить?
Каким образом, если процедура на обновление записи?
clickmaker (2007-07-05 09:26:00) [4]
> @dim (29.06.07 09:37)
а почему повторяющееся значение выясняется "задним числом" - селектом?
Не проще ли перед обновлением проверить?
ЮЮ (2007-07-05 05:00:00) [5]> А вы думаете ROLLBACK TRAN и return -100 будут отработаны?
> Конечно не будут. Догадались о чём я?
В конце-концов можно поменять местами
ROLLBACK TRAN
RAISERROR('Повторяющееся значение атрибута', 16, 1)
RETURN
P.S. А разве это дело процедуры откатывать транзакцию, которую она не начинала?
В рамках транзакции выполняется только эта процедура или ещё есть что-то в пакете?
_MaSteR_NN_ (2007-07-04 09:46:00) [6]А вы думаете ROLLBACK TRAN и return -100 будут отработаны? Конечно не будут. Догадались о чём я?
Fay (2007-06-29 12:54:00) [7]set nocount on ?
@dim (2007-06-29 11:09:00) [8]
> Ega23 ©
Что изменится?
Ega23 (2007-06-29 09:54:00) [9]Так попробуй:
RAISERROR (N'Повторяющееся значение атрибута', 16, 1)