![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с параметрами в SQL.
Гриша1 © (2004-04-01 13:54:00)Могу ли я в SQL сравнить параметр с константой?
Например,
select * from ....
where :PARAM1='ABCD'
Гриша1 (2004-04-01 15:37:00) [1]Пустые значения не NULL, а строки ''. Параметр PREZERV1 никогда равным NULL не бывает.
Результат все время равносилен следуещему
select * from my_table
where F1=:PREZERV3 or F1=''
order by F2,F3
Sergey_Masloff (2004-04-01 15:34:00) [2]Курдль © (01.04.04 15:19) [14]
>С пустым таким образом - не выйдет. Не сможешь передать >параметру NULL
Откуда такая уверенность?
ParamByName('XXX').Clear(); не помогает?
bushmen (2004-04-01 15:24:00) [3]>Не сможешь передать параметру NULL
Как я понимаю, у него пустые значения не NULL, а если и NULL, то можно передавать, например, 0, а в самой процедуре уже обработать
Курдль (2004-04-01 15:19:00) [4]С пустым таким образом - не выйдет. Не сможешь передать параметру NULL
Гриша1 (2004-04-01 15:11:00) [5]Да не заморачивайся, Курдль. Намутю в коде что-нибудь.
Но если очень интересно, то запрос примерно такой.
СУБД Firebird.
Компонент TIBQuery.
select * from my_table
where F1=:PREZERV3 or F1='' or :PREZERV='ABCD'
order by F2,F3
Хочу сделать так, чтобы выводились записи с пустым полем F1, c F1=параметр, и при передаче особого значения параметра(ABCD) - все записи. Реально?
Johnmen (2004-04-01 15:04:00) [6]> Конечно, пробовал, похоже он вообще игнорирует это условие.
> Результат такой же как и без второго операнда OR.
>при определенном значение PARAM1 условие выполнялось всегда.
Видимо тебе надо AND, судя по всему...
Sergey_Masloff (2004-04-01 15:03:00) [7]Гриша1 (01.04.04 13:54)
>Могу ли я в SQL сравнить параметр с константой?
>Например,
>select * from ....
>where :PARAM1='ABCD'
например
select * from ....
where 'ABCD'=:PARAM1
можешь
Курдль (2004-04-01 14:58:00) [8]
> Конечно, пробовал, похоже он вообще игнорирует это условие.
> Результат такой же как и без второго операнда OR.
Ок! Давай разбираться, что за СУБД, как объявлены параметры, как передаются и т.п.
Гриша1 (2004-04-01 14:47:00) [9]To BushMen - Извини, не так выразился, динамически формируется не сам запроc, а значения параметров.
Johnmen (2004-04-01 14:45:00) [10]>Могу ли я в SQL сравнить параметр с константой?
Можно, разрешаю :)
Гриша1 (2004-04-01 14:44:00) [11]То Курдль. Конечно, пробовал, похоже он вообще игнорирует это условие. Результат такой же как и без второго операнда OR.
To BushMen. 100% нельзя так сделать? Ты это знаешь наверняка или просто так думаешь.
Курдль (2004-04-01 14:30:00) [12]Тарды сравнивай и не парься над гнусными мыслями об оптимизации проги и т.п. вредностями - главное, шоб тебе было хорошо!
Кстати, а ты, прежде чем спросить, сам запрос-то пробовал на реальной БД? Или это тоже лень - проще на форуме все разузнать...
bushmen (2004-04-01 14:29:00) [13]>и в нескольких местах динамически формируется SQL.Text
Если у тебя уже формируется запрос динамически, вот и дописывай туда. А запросов таких видов, как тебе надо нет
Гриша1 (2004-04-01 14:20:00) [14]То Курдль: Ты зришь прямо в корень. Молодец. Лень, и потом придется не два раза написать. У меня несколько таких запросов в программе, и в нескольких местах динамически формируется SQL.Text;
Курдль (2004-04-01 14:13:00) [15]А не проще достигать той же цели двумя разными запросами?
Или Вам лень 2 раза написатьQuery.SQL.Text := ...?
Гриша1 (2004-04-01 14:07:00) [16]Ты не понял, я передаю разные значения PARAM1 и хочу, чтобы при определенном значение PARAM1 условие выполнялось всегда.
Вот так :
select * from ....
where [field]=:PARAM1 or 'ABCD=:PARAM1
Чтобы при ABCD выводились все значения, а при других включался фильтр по полю.
Лысый (2004-04-01 13:59:00) [17]Нафига. Параметр подразумевает, что меняется в процессе выполнения программы. Тебе же проще просто сделать
select * from ....
where [field]='ABCD'