Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Откат транзакций во вложенных процедурах  [new]
RAMZEZ II
Member

Откуда: Приморье
Сообщений: 535
Добрый день, друзья. У меня такая проблема. Имеются 2 ХП.
Например,
1) CREATE PROCEDURE sp1 AS
.....................................
BEGIN TRAN
.....................................
.....................................
EXEC @ret = sp2 @p1, @p2...
IF @ret <> 0
GOTO Error

.....................................
.....................................

IF @@TRANCOUNT <> 0
COMMIT

:Error
RAISERROR (.......................................)
IF @@TRANCOUNT <> 0
ROLLBACK
RETURN -1


И есть вторая ХП
2) CREATE PROCEDURE sp2 AS
.....................................
BEGIN TRAN
.....................................
.....................................

IF @ERROR <> 0
GOTO Error

.....................................
.....................................

IF @@TRANCOUNT <> 0
COMMIT

:Error
RAISERROR (.......................................)
IF @@TRANCOUNT <> 0
ROLLBACK
RETURN -1



И что получается - если я делаю запуск процедуры sp1 и во вложенной ХП sp2 возникает исключение, то
появляется ошибка 266 - Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRAN is missing. Previous count = %ld, Current count = %.

Эта ошибка вылетает на клиенте, а если я запускаю процедуру через SQL Editor, то все отлично, без ошибок.....
P.S. MSSQL 2008
12 дек 11, 10:07    [11747122]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
RAMZEZ II,

клиент-то, небось, всё это обрачивает в свою транзакцию?
А завершить-то из-за Ваших ROLLBACKов корректно не может...
@@TRANCOUNT он, похоже, не проверяет!

Почитайте ещё про вот это: SET XACT_ABORT (Transact-SQL)
Должно сильно полегчать.
12 дек 11, 10:24    [11747193]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
RAMZEZ II
Member

Откуда: Приморье
Сообщений: 535
iap, клиент - IntraWEB приложение на делфе и в качестве доступа к БД использую ADO
12 дек 11, 10:27    [11747213]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
RAMZEZ II
Member

Откуда: Приморье
Сообщений: 535
iap, ок попробую, спасибо
12 дек 11, 10:29    [11747225]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
RAMZEZ II
iap, клиент - IntraWEB приложение на делфе и в качестве доступа к БД использую ADO
Ну так Вы написали в приложении
ADOConnection.BeginTrans;
....
ADOConnection.CommitTrans;
....
ADOConnection.RollbackTrans;
?
12 дек 11, 10:35    [11747261]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
RAMZEZ II
Member

Откуда: Приморье
Сообщений: 535
iap, нет. Транзакции у меня открываются на уровне сервера в T-SQL в самих ХП
13 дек 11, 02:44    [11753929]     Ответить | Цитировать Сообщить модератору
 Re: Откат транзакций во вложенных процедурах  [new]
Коляныч
Member

Откуда:
Сообщений: 279
По моему правильнее сначала откатить транзакцию ROLLBACK, потом уже RAISERROR делать
13 дек 11, 08:18    [11754088]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить