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

Откуда: Пермь
Сообщений: 18326
В одной транзакции происходит только два важных для меня изменения в базе данных. Остальные как бы расчетные, откатывать их не надо в случае чего. Но из транзакции я их выкинуть не могу. Поэтому транзакция получается очень большая. Нельзя сделать так, что бы любые действия над некоторой таблицей не попадали в транзакцию, а как бы выполнялись в отдельной транзакции и сразу комитились. Пример:

Begin tran
Insert into maintable --важные изменения

If @@error <>0 begin rollback tran return end
Insert into WorkTable....--Эти изменения меня не интересуют, я не хочу что бы

Update WorkTable....--они висели в открытой транзакции,

.....
Insert into WorkTable....--замедляя тем самым работу.

Update WorkTable....--


Insert into maintable --Важные изменения

If @@error <>0 begin rollback tran return end
Commit tran
12 янв 04, 14:18    [487788]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Попробуйте перейти на использование локальных переменных типа таблица, ибо:

Transactions involving table variables last only for the duration of an update on the table variable. Thus, table variables require less locking and logging resources.
12 янв 04, 14:25    [487817]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Можно попробовать Table Var
12 янв 04, 14:25    [487818]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
А да забыл сказать, про табле var я знаю, но мне надо использовать физическую таблицу (или временную), что бы передавать данные во вложенные хранимые процедуры. Можно конечно при запусе вложенной процедуры сделать insert into WorkTable select * from @t, а при возврате делать наоборот. insert into @t select * from worktable. Но не уверен, что такой способ окупится.
12 янв 04, 14:38    [487839]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Нельзя сделать так, что бы любые действия над некоторой таблицей не попадали в транзакцию, а как бы выполнялись в отдельной транзакции и сразу комитились.

Ну так может выполнить эте "неважные" действия ДО транзакции ?
12 янв 04, 14:42    [487853]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
MegBegb
Member

Откуда: Russia
Сообщений: 9
Ну так может выполнить эте "неважные" действия ДО транзакции ?

А как быть в том случае, если результаты "неважных" изменений неким образом зависят от "важных"?
12 янв 04, 14:50    [487875]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
MegBegb правильно сказал. Мне надо вначале сделать важные изменения. Потом исходя из этих результатов делать расчеты. Потом исходя из расчетов сного делать важные изменения.
12 янв 04, 14:59    [487894]     Ответить | Цитировать Сообщить модератору
 Re: Исключить из транзакции что либо.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Создавай постоянную таблицу в tempdb, при старте сервера
От логгирования не избавит, просто будет немного быстрее работать
12 янв 04, 15:18    [487952]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить