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

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

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...
11 ноя 05, 16:26    [2061186]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
alexeyvg
Member

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

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...
А что вы имеете в виду под "на их место"? С тем-же ПК? Тогда никто не вставит, достаточно обернуть всё в транзакцию.
11 ноя 05, 16:32    [2061230]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
alexeyvg
Soldat
часть строк в таблице подлежит замене, т.е. старые удаляются а на их место вставляются новые строки.

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...
А что вы имеете в виду под "на их место"? С тем-же ПК? Тогда никто не вставит, достаточно обернуть всё в транзакцию.

Нет пк будет другой.
Просто все обращения к записям идут по групповому ID и группа записей с одинаковым group id удаляется, место этих записей вставляются другие записи с тем же group id
11 ноя 05, 16:48    [2061331]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
set xact_abort on
begin tran
delete t with(serializable) where id = ....
insert t ....
commit tran
11 ноя 05, 18:41    [2061738]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Glory
Member

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

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...

Расшифруйте ваше "вщемится". Это insert ? update ? delete ? select ?...
11 ноя 05, 20:08    [2061981]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Prolog
set xact_abort on
begin tran
delete t with(serializable) where id = ....
insert t ....
commit tran
Да не очень то хочется использвать serializable, ведь подрозумевается, что с этой таблцей могут работать другие процедуры, но с другими groupid. я хочу именно свой кусочек таблицы защитить :)
14 ноя 05, 12:27    [2065641]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Glory
Soldat
часть строк в таблице подлежит замене, т.е. старые удаляются а на их место вставляются новые строки.

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...

Расшифруйте ваше "вщемится". Это insert ? update ? delete ? select ?...
меня больше всего беспокоит select в тот момент когда старые данные удалены а новые еще не вставлены
14 ноя 05, 12:29    [2065648]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Glory
Member

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

Как правильно организовать транзакцию ?

так, чтоб между удалением и вставкой кто нибудь не вщимился...

Расшифруйте ваше "вщемится". Это insert ? update ? delete ? select ?...
меня больше всего беспокоит select в тот момент когда старые данные удалены а новые еще не вставлены

Если delete не подтвержден, то что вас беспокоит ?
Поставьте в другом коннекте дефолтный read commited и он не сможет прочитать данные незавершенной транзакции
14 ноя 05, 12:33    [2065681]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Soldat
Member

Откуда: Москва
Сообщений: 854
Glory
Если delete не подтвержден, то что вас беспокоит ?
Поставьте в другом коннекте дефолтный read commited и он не сможет прочитать данные незавершенной транзакции
Если я не ошибаюсь, то read commited установлен по умолчанию.
Если я правильно понял, то для того чтоб и табличку долго не держать и неприятностей избежать, две инструкции delete и insert достаточно обернуть в дополнительную транзакцию. Верно?
begin tran myNestedTran
  delete from ...
  insert into 
commit tran myNestedTran

Спасибо.
14 ноя 05, 13:10    [2065874]     Ответить | Цитировать Сообщить модератору
 Re: использовать хинт?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Soldat
Да не очень то хочется использвать serializable, ведь подрозумевается, что с этой таблцей могут работать другие процедуры, но с другими groupid. я хочу именно свой кусочек таблицы защитить :)
Так serializable запретить только тот id, который указан в where. Я думаю, индекс по id есть.
15 ноя 05, 12:43    [2069688]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить