08.10.2015, 12:37 | #1 |
Участник
|
IN фильтр в while select запросе?
Пользователь выбирает в мультиселекте набор значений.
Потом в коде есть while select , который надо отфильтровать по этому переданному набору значений. Я могу сделать врем таблицу,заполнить этим набором значений и потом join к while-select. Появились ли какие-то новые/более симпатичные способы, как это можно выполнить в AX2012? AX2012 R2 |
|
08.10.2015, 12:50 | #2 |
Участник
|
Query?..
|
|
08.10.2015, 12:58 | #3 |
Участник
|
спасибо, понятно, раз новых нет, старыми костылями придется пользоваться(
|
|
08.10.2015, 14:26 | #4 |
Участник
|
Query целиком и полностью подходит под данную задачу, и без всяких временных таблиц, зачем изобретать велосипед..
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 14:51 | #5 |
Участник
|
тк
1) while-select уже существует и переписывать существующую логику в query только для того, чтобы добавить доп условие на 1 поле - имхо, не умно 2) критерии из этого while-select только с extended query ranges можно попробовать запихнуть в query, но по пути еще можно огрести много отладки и багов .... Последний раз редактировалось kitty; 08.10.2015 в 14:59. |
|
08.10.2015, 15:16 | #6 |
Участник
|
Только, делайте временную таблицу TempDB
__________________
Axapta v.3.0 sp5 kr2 |
|
08.10.2015, 15:24 | #7 |
Участник
|
|
|
08.10.2015, 17:07 | #9 |
Участник
|
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 17:11 | #10 |
Участник
|
«У нас в клубе принято джентльменам верить на слово!» ©
|
|
08.10.2015, 18:18 | #11 |
Участник
|
|
|
08.10.2015, 18:42 | #12 |
Участник
|
Неправда, все работает абсолютно идентично while select, только удобней с точки зрения поддержки и изменения запроса. За редким исключением.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 19:40 | #13 |
Участник
|
|
|
08.10.2015, 20:02 | #14 |
Участник
|
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
|
|
08.10.2015, 21:34 | #15 |
Участник
|
Мне кажется я начинаю понимать, что вы путаете количество записей с количеством наложенных фильтров, я прав? Если нет, то тогда вас вообще не понимаю, никаких ограничений query от количества записей в таблице мне не известно. А если я прав, то вам уже дважды показали, что следует делать в случае заранее не известного количества фильтрующих записей.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
09.10.2015, 10:03 | #16 |
Участник
|
все то что Вы можете написать в обычном запросе Вы так же можете написать и в Query, а если Вам так необходим In в Вашем запросе то переведите его его к виду
(INVENTTABLE.ITEMID == 1 OR INVENTTABLE.ITEMID == 2 OR .......) Query это позволяет |
|
09.10.2015, 13:30 | #17 |
Участник
|
не забывайте только что все равно есть ограничение по длине
|
|
09.10.2015, 14:03 | #18 |
Участник
|
у меня загнулась приблизительно на 4к записях
|
|
09.10.2015, 14:35 | #19 |
Участник
|
Query и правда не подойдёт, если количество OR может быть очень большим.
В 2012й хорошим вариантом будет создать временную таблицу типа TempDb, наполнять поля ключей, по которым же потом и джойнить. Не забудьте добавить индекс на этой временной таблице по полям джойна. Если нужно производить джойн по Рекайди (к примеру), то можно воспользоваться стандартной таблицей TmpDataAreaRecidFilter. Последний раз редактировалось Cardagant; 09.10.2015 в 15:11. |
|
12.10.2015, 13:05 | #20 |
Участник
|
Цитата:
Сообщение от gl00mie
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|