Насправді я бачив подібне, що використовується у звітах BIRT. Запит, що передається BIRT, має форму:
select a,b,c from t where a = ?
і "?" замінюється під час виконання фактичним значенням параметра, вибраним із випадаючого вікна. Вибір у спадному меню задається:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
щоб ви отримали всі можливі значення плюс " *
". Якщо користувач вибирає " *
" з випадаючого вікна (маючи на увазі всі значення a, слід вибрати), запит має бути змінено (за допомогою Javascript) перед запуском.
З моменту "?" є позиційним параметром, і ОБОВ'ЯЗКОВО залишатися там, щоб інші речі працювали, Javascript змінює запит:
select a,b,c from t where ((a = ?) or (1==1))
Це в основному знімає дію пункту where, залишаючи при цьому позиційний параметр.
Я також бачив випадок AND, який використовуються ледачими кодерами, динамічно створюючи SQL-запит.
Скажіть, що вам потрібно динамічно створити запит, який починається select * from t
і перевіряється:
- ім'я Боб; і
- зарплата становить> 20000 доларів
деякі люди додають перший з WHERE і наступні з AND і, таким чином:
select * from t where name = 'Bob' and salary > 20000
Ледачі програмісти (і це не обов'язково є поганою ознакою) не розрізнятимуть додані умови, вони б почали з цього пункту select * from t where 1=1
і просто додали б пункти AND після цього.
select * from t where 1=1 and name = 'Bob' and salary > 20000