Эту технику рассмотрим на примере вот такого WEB-контрола фильтрации и отбора товара:
Этот контрол использует вот такую процедуру:
И три вот такие функции:
Как видите для пользователя все просто. Он может одновременно задавать на форме любую комбинацию фильтров и слов поиска. Проблема заключается в реализации процедуры. Глядя на нее, можно подумать
то процедура разбита на раздельные функции только для испольнения раздельной компиляции. Однако это не так. Это сделано из-за сортировки, которую нельзя выполнить по нужному мне полю из-за Group By. А компиляция, несмотря на рабиение процедуры на несколько SQL-batch
все равно выдает ЕДИНЫЙ план процедур и вызванных функций. И при исполнении этого плана проверяется чтобы функции FreeText не получила на вход пустой аргумент. В противном случае - сайт падает с предупреждением:
Null or empty full-text predicate.
Примерно то же происходит если использовать в бейсике функцию IIF вместо оператора IF-THEN-ELSE. Проверяется корректность всех аргументов. Теперь вернитесь на процедуру и посмотрите на переменные с постфиксом LOCAL, которыми обеспечивается корректность аргументов для FreeText на этапе их проверки. На такие простейшие фишки часто попадаются начинающие SQL-программисты.
Удачи!
<SITEMAP> <MVC> <ASP> <NET> <DATA> <KIOSK> <FLEX> <SQL> <NOTES> <LINUX> <MONO> <FREEWARE> <DOCS> <ENG> <CHAT ME> <ABOUT ME> < THANKS ME> |