29.05.2013, 12:54 | #1 |
----------------
|
AX2009. Не используйте NotExists
Ошибка известная с давних времен.
Если в запросе использовать notexists join, то последующие exists & notexists не работают. Небольшой пример на AX2009RU8: X++: static void JobNotExists(Args _args) { InventTable inventTable; InventTable inventTableE; InventTable inventTableNE; ItemId itemId = '1001', itemIdne = '1001notFound'; ; // Убедимся, что такая запись есть select itemId from inventTable where inventTable.ItemId == itemId; info(inventTable.ItemId); // Убедимся, что такая ItemId есть, а ItemIdne нет select itemId from inventTable where inventTable.ItemId == itemId notexists join inventTableNE where inventTableNE.ItemId == itemIdne; info(inventTable.ItemId); // Здесь exists возвращает false, но на результате это не сказывается select itemId from inventTable where inventTable.ItemId == itemId notexists join inventTableNE where inventTableNE.ItemId == itemIdne exists join inventTableE where inventTableE.ItemId == itemIdne; error(inventTable.ItemId); // Здесь второй notexists возвращает false, но на результате это не сказывается select itemId from inventTable where inventTable.ItemId == itemId notexists join inventTableE where inventTableE.ItemId == itemIdne notexists join inventTableNE where inventTableNE.ItemId == inventTable.ItemId; error(inventTable.ItemId); } Встретил в HRP несколько примеров такого кода с макросом TransLinkNotExistsReversed_RU P.S. Сейчас не могу проверить, но помнится на Oracle это не воспроизводится Последний раз редактировалось Wamr; 29.05.2013 в 12:58. |
|
|
За это сообщение автора поблагодарили: lev (5), MikeR (3), A_BAS (2). |