|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
Господа, такой вопрос. Нужно в цикле обработать несколько таблиц. Использую 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 Вопрос, насколько верно предположение что в обеих командах будут задействованы одни и те-же ключи? Заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2010, 19:01 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
Господа, неужели никто не сталкивался с подобным вопросом? Это своего рода альтернатива курсору, только за одну итерацию можно обрабатывать сразу несколько записей. Заранее большоей спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2010, 17:45 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
Мысль вслух: никогда не понимал смысла использования set rowcount... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2010, 07:14 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
White OwlМысль вслух: никогда не понимал смысла использования set rowcount... Ну например, нужно обновить большое кол-во записей. Обновление приходится делать в цикле небольшими порциями. set rowcount как раз позволяет задать размер этих порций. далее просто процесс крутится в цикле пока не обновятся все записи. тоже иногда полезно просто задать максимальное количество при вставке, что б лог не переполнить ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2010, 23:56 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
KruWhite OwlМысль вслух: никогда не понимал смысла использования set rowcount...Ну например, нужно обновить большое кол-во записей. Обновление приходится делать в цикле небольшими порциями.Почему "приходится"? Чем вам полное обновление не нравится? Kruтоже иногда полезно просто задать максимальное количество при вставке, что б лог не переполнитьА если так уж надо сегментировать вставку, то проще резать поток на клиенте и посылать четко контролируемыми кусками. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2010, 00:25 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2010, 11:55 |
|
ASE - set rowcount обработка нескольких таблиц
|
|||
---|---|---|---|
#18+
Всем большое спасибо за отклик. В общем, кажется, что 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 батч довольно неплохо справляется с задачей ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 00:25 |
|
|
start [/forum/topic.php?fid=55&fpage=23&tid=2010445]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 145ms |
0 / 0 |