Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE - set rowcount обработка нескольких таблиц / 7 сообщений из 7, страница 1 из 1
12.11.2010, 19:01
    #36952557
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
Господа, такой вопрос.

Нужно в цикле обработать несколько таблиц.

Использую
set rowcount @batchsize

select key into #t from table1

update table 2 where key in #t key

delete table 1 where key in #t key


Но есть очень сильный соблазн сделать покороче

set rowcount @batchsize

update table 2 where key in table 1 key

delete table 1


Вопрос, насколько верно предположение что в обеих командах будут задействованы одни и те-же ключи?

Заранее спасибо
...
Рейтинг: 0 / 0
26.11.2010, 17:45
    #36979942
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
Господа,
неужели никто не сталкивался с подобным вопросом?

Это своего рода альтернатива курсору, только за одну итерацию можно обрабатывать сразу несколько записей.

Заранее большоей спасибо
...
Рейтинг: 0 / 0
27.11.2010, 07:14
    #36980577
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
Мысль вслух: никогда не понимал смысла использования set rowcount...
...
Рейтинг: 0 / 0
06.12.2010, 23:56
    #36998372
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
White OwlМысль вслух: никогда не понимал смысла использования set rowcount...

Ну например, нужно обновить большое кол-во записей.
Обновление приходится делать в цикле небольшими порциями.

set rowcount как раз позволяет задать размер этих порций.

далее просто процесс крутится в цикле пока не обновятся все записи.

тоже иногда полезно просто задать максимальное количество при вставке, что б лог не переполнить
...
Рейтинг: 0 / 0
07.12.2010, 00:25
    #36998385
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
KruWhite OwlМысль вслух: никогда не понимал смысла использования set rowcount...Ну например, нужно обновить большое кол-во записей.
Обновление приходится делать в цикле небольшими порциями.Почему "приходится"? Чем вам полное обновление не нравится?

Kruтоже иногда полезно просто задать максимальное количество при вставке, что б лог не переполнитьА если так уж надо сегментировать вставку, то проще резать поток на клиенте и посылать четко контролируемыми кусками.
...
Рейтинг: 0 / 0
09.12.2010, 11:55
    #37003994
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
White OwlМысль вслух: никогда не понимал смысла использования set rowcount...
Встретил такой вариант paging'а (правда на M$ SQL):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
...
declare @firstID int

set rowcount @startRowIndex

select
  @firstID = ID
from
  SmthTable
order by ID

set rowcount @maximumRows

select
  *
from
  SmthTable
where
  (ID >= @firstID)
order by ID

set rowcount  0 
...
...
Рейтинг: 0 / 0
14.12.2010, 00:25
    #37012480
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE - set rowcount обработка нескольких таблиц
Всем большое спасибо за отклик.

В общем, кажется, что rowcount не очень распространённая практика.
Полагаться на то что Sybase в 2х последующих запросах отберёт одни и те же записи, по видимому нельзя. Т.е. алгоритм остаётся такой

while (1=1)
begin
set rowcount @batchsize

select into #t from big table where processed = 'N'
if @@rowcount = 0 break

set row count 0

process big table where exits (select from #t)

update big table set processed = 'Y' where exists (select from #t)


end

Конечно подразумеваем, чтов #t выбираются ключи на которых есть индекс

Для чего это надо - ну например когда нужно 10 миллионов записей обновить.
Если update запустить, то лог быстро закончится. На клиента столько тащить, чтобы оттуда потом мелкими пачками обновлять дороговато с точки зрения ресурсов будет.

Простой ad-hoc батч довольно неплохо справляется с задачей
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE - set rowcount обработка нескольких таблиц / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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