|
Как отловить ошибку на клиенте?
|
|||
---|---|---|---|
#18+
С клиента надо выполнить несколько SP в одной транзакции. Соответственно заворачиваем все что надо во внешнюю транзакцию и вперед. BEGIN TRAN EXEC sp_Save1..... .... IF @@Error<>0 ROLLBACK TRAN ELSE COMMIT TRAN В каждой из вложенных процедур возможен RoolBack, и в этом случае на клиента доезжает не то сообщение об ошибке. Msg 50000, Level 16, State 1 Процедура sp_SaveFinDoc: Проверка. -- Вот это надо Msg 266, Level 16, State 1 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRAN is missing. Previous count = 1, Current count = 0. Msg 3902, Level 16, State 1 The commit transaction request has no corresponding BEGIN TRANSACTION. -- А вот это выезжает Как оформить процедуры и их вызов с клиента, чтоб клинт получил то, что надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2001, 09:37 |
|
Как отловить ошибку на клиенте?
|
|||
---|---|---|---|
#18+
Первое- транзакция может откатываться в процедуре, второе- @@Error нужно проверять после каждого вызва ХП,третье- после каждого последующего SQL оператора @@error меняет значение, четвертое- MS SQL ведет себя несколько некорректно к транзакциям в ХП, после неудачного завершения ХП может откатить транзакцию самостоятельно, а может не откатить (проверено на практике). Лучже всего передусматривать в процедурах код возврата (return 0 или return -1), И вызов таких процедур может выглядеть примерно так: EXECUTE @status = sp_Save1..... if @status<>0 while @@trancount>0 ROLLBACK TRAN else COMMIT TRAN ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2001, 15:17 |
|
Как отловить ошибку на клиенте?
|
|||
---|---|---|---|
#18+
В SP IF @@ERROR <> 0 BEGIN ROLLBACK TRAN RETURN END COMMIT TRAN (Или Continue ...) На клиенте- анализ ErrCode P.E. для PowerBuilder: EXEC Sp_Test1 @Var1,...; IF SQLCA.ErrCode<0 THEN ROLLBACK TRAN; // не помешает MessageBox(...) ELSE ... EXEC Sp_Test2 @Var2,...; IF SQLCA.ErrCode<0 THEN ROLLBACK TRAN; // не помешает MessageBox(...) ELSE И т.д. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2001, 21:29 |
|
|
start [/forum/topic.php?fid=46&msg=32003916&tid=1827064]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 391ms |
0 / 0 |