powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отловить ошибку на клиенте?
3 сообщений из 3, страница 1 из 1
Как отловить ошибку на клиенте?
    #32003808
Osya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С клиента надо выполнить несколько 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. -- А вот это выезжает

Как оформить процедуры и их вызов с клиента, чтоб клинт получил то, что надо?
...
Рейтинг: 0 / 0
Как отловить ошибку на клиенте?
    #32003916
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первое- транзакция может откатываться в процедуре, второе- @@Error нужно проверять после каждого вызва ХП,третье- после каждого последующего SQL оператора @@error меняет значение, четвертое- MS SQL ведет себя несколько некорректно к транзакциям в ХП, после неудачного завершения ХП может откатить транзакцию самостоятельно, а может не откатить (проверено на практике).
Лучже всего передусматривать в процедурах код возврата (return 0 или return -1),
И вызов таких процедур может выглядеть примерно так:
EXECUTE @status = sp_Save1.....
if @status<>0
while @@trancount>0 ROLLBACK TRAN
else COMMIT TRAN
...
Рейтинг: 0 / 0
Как отловить ошибку на клиенте?
    #32003933
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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
И т.д. ...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как отловить ошибку на клиенте?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]