Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не возможно создать новую транзакцию / 7 сообщений из 7, страница 1 из 1
30.10.2002, 06:25:28
    #32062934
dik
dik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Поясните ситуацию
Из Excel+VBA через ADODB к MS SQL 7
По циклу
Код: plaintext
cn.BeginTrans 'Начинаю транзакцию

Выполняю подряд три хранимых процедуры по вставке данных в таблицы
Код: plaintext
1.
cmd.CommandText =  "Proc1" 
cmd.CommandType = adCmdStoredProc

после каждого выполнения ХП проверяю код ошибки
Код: plaintext
1.
2.
Set cmd.ActiveConnection = cn
cmd.Execute Options:=adExecuteNoRecords
If Err.Number <>  0  Then   cn.RollbackTrans

в конце закрываю транзакцию
Код: plaintext
cn.CommitTrans


Проходов по циклу порядка 9000 раз
Такая ситуация - примерно через каждую 1000 (иногда больше/меньше)
Получаю ошибку от сервера
Cannot create new transaction because capacity was exceeded.
Т.к. корректно отрабатываю ошибку (без прерывания выполнения проги) - то дальше идёт проход по циклу и опять всё идет ОК
Поясните - так чего не хватает для открытия новой транзакции? И почему на следующем проходе - транзакция все-таки открывается?
Вложенность транзакций всегда 1

С уважением






Cannot create new transaction because capacity was exceeded.
...
Рейтинг: 0 / 0
30.10.2002, 09:43:52
    #32062962
vap
vap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Если начало транзакции внутри цикла, то это неправильно.
...
Рейтинг: 0 / 0
30.10.2002, 11:56:03
    #32063056
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
К предыдущему ответу (который ИМХО совершенно правильный) хочу только добавить, что открывая в цикле новую транзакцию, вы вместо одной транзакции делаете большое количество вложенных транзакций и достигаете ограничения на количество вложенных транзакций.
...
Рейтинг: 0 / 0
30.10.2002, 12:13:10
    #32063071
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Я думаю, что проблемма здесь не во вложенности, ведь транзакция открыватся и закрыватся внутри цикла... Да и сообщает что превышена вместимость, а не уровень вложенности. Вот я попробовал в QA:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare @i integer
set @i =  1 
while @i <=  9000 
begin
	begin transaction
	print cast(@@trancount as char( 5 ))
	set @i = @i +  1 
end

Ошибки не получил. Может проблемма в ADODB? Да и еще вопрос, а зачем явно открывать транзакцию в теле цикла? Может лучше транзакцию открывать в самой процедуре.
...
Рейтинг: 0 / 0
30.10.2002, 12:37:27
    #32063087
dik
dik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Как правильно замечено fima транзакция открывается и закрывается в цикле.
Может я неправильно рассуждаю?

Конечно можно открыть одну транзакцию перед циклом, но получится что одна транзакция будет содержать 9000 Х 3 процедуры вставки записей в 3 таблицы...?

Поэтому я пошел по пути - выполнил одну логическую операцию - закрыл транзакцию. Т.е. если одна транзакция не прошла - это не чревато для остальных записей.

Не понятная все-таки ошибка - в BOL я ссылок на неё не получил :-(
...
Рейтинг: 0 / 0
30.10.2002, 12:43:07
    #32063091
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Я считаю, что не клиентское это дело - открывать и закрывать транзакции. Лучше создать еще одну SP, в которой выполнять три нужных процедуры с контролем на TSQL.
...
Рейтинг: 0 / 0
30.10.2002, 13:22:41
    #32063114
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возможно создать новую транзакцию
Возможно, ADO сообщает, что провайдер не поддерживает транцакции...

А что мешает поставить begin tran собственно в сам скрипт?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не возможно создать новую транзакцию / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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