Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вложенные транзакции, почему такой результат? 
V
    Опции темы
_AMD_
  Дата 6.2.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2007

Репутация: нет
Всего: нет



есть код
Код

begin tran a 
    ...
begin tran b
        ...
rollback tran b
        ...
commit tran a

все действия, которые находятся во вложенной транзакции не отменяются. почему?
И еще один вопрос. Одна Stored-процедура начинает транзакцию, вызывает другую процедуру, в которой также есть своя транзакция. Вторая процедура может отменить свою транзакцию. Если это происходит то она сообщает об этом первой и и в свою очередь отменяет свою транзакцию. У меня вот такая ошибка:

System.Data.SqlClient.SqlException: Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

не понимаю в чем дело.

Это сообщение отредактировал(а) _AMD_ - 6.2.2009, 11:28
PM MAIL   Вверх
Zioma
Дата 6.2.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Цитата(_AMD_ @  6.2.2009,  09:25 Найти цитируемый пост)
И еще один вопрос. Одна Stored-процедура начинает транзакцию, вызывает другую процедуру, в которой также есть своя транзакция. Вторая процедура может отменить свою транзакцию. Если это происходит то она сообщает об этом первой и и в свою очередь отменяет свою транзакцию. У меня вот такая ошибка:

System.Data.SqlClient.SqlException: Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.

не понимаю в чем дело.


Взято из BOL'а:
Код

Фиксация внутренних транзакций не учитываются компонентом SQL Server. Транзакция либо фиксируется, либо откатывается
в зависимости от предпринятого действия в конце самой внешней транзакции. Если внешняя транзакция зафиксирована, внутренние
вложенные транзакции также будут зафиксированы. Если внешняя транзакция откатывается, то все внутренние транзакции также будут
отменены, независимо от того, были ли отдельные внутренние транзакции зафиксированы.


Что касается первого примера, то он вообще работать не будет. То есть на
Код

rollback tran b

должна высветится ошибка
Код

Cannot roll back b. No transaction or savepoint of that name was found.


Все потому, что 
Код

Нельзя ссылаться на внутренние транзакции набора именованных вложенных транзакций для аргумента transaction_name инструкции
ROLLBACK TRANSACTION. Аргумент transaction_name может ссылаться только на имя самой внешней транзакции. Если инструкция
ROLLBACK TRANSACTION transaction_name с именем самой внешней транзакции выполняется на любом уровне набора вложенных
транзакций, для всех вложенных транзакций будет выполнен откат. Если инструкции ROLLBACK TRANSACTION выполняются
без аргумента transaction_name на любом уровне набора вложенных транзакций, происходит откат всех вложенных транзакций, включая самую внешнюю транзакцию.

PM MAIL   Вверх
_AMD_
Дата 6.2.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2007

Репутация: нет
Всего: нет



благодарю. методом проб и ошибок понял свою ошибку и переделал все процедуры. а уже потом прочитал Ваш ответ. smile
PM MAIL   Вверх
uranpro
Дата 26.10.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Добрый день!
Продолжаю тему! Автор не пожелал поделиться выходом из ситуации =(

Как реализовать такую конструкцию ?
Код

begin tran t1;
...
begin tran t2;
...
rollback tran t2;
...
commit t1;



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
_AMD_
Дата 27.10.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2007

Репутация: нет
Всего: нет



давно это было. немного забросил программирование.
кажется я просто переделал код, чтобы было без вложенных транзакций.
PM MAIL   Вверх
uranpro
Дата 27.10.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



понятно =(


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Itsys
Дата 27.10.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34



uranpro, А у тебя конкретная проблема или так на уровне поинтересоваться? Водь всегда можно решить задачу без вложенных транзакций
PM MAIL WWW Skype   Вверх
uranpro
Дата 27.10.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



есть приложение, которое работает с бд(больше пяти таблиц), все связанны с друг другом, начиная с первой до последней. т.е. если удалить строку из 1 таблы, то каскадом удалится во всех остальных.
информация вносится по ступеням)
хотелось реализовать что-то типа возможности отмены изменений на всех ступенях)
придумывать велосипед что-то не хочется) думал может есть варианты у кого


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Itsys
Дата 27.10.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34



Брр... тогда не понятно, зачем вложенные транзакции... Одна большая транзакция, которая фиксит все изменения во всех таблицах либо откатывает опять же все изменения...
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.