Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чудо запрос.  [new]
vertum
Member

Откуда:
Сообщений: 30
Допустим необходимо написать хранимую процедуру или запрос в котором есть два параметра. К примеру выбираются марка машины и год изготовления. Можно выбрать марку и год тогда результатом будет таблица к примеру тойота и все 150 машин на год 2012. Но в параметр (допустим с клиентского приложения) пришло значение 'All' и 'All' тогда таблицу на вывод можно было бы сделать типа Select * from Table. Но хочется сохранить конструкцию Select * from Table where c=p1 and c=p2.

Была мысль типа того что ниже:
. Пусть машина будет @@

DECLARE @@Parametr1 AS VARCHAR(20)
DECLARE @@Parametr2 AS VARCHAR(20)
==================
SET @@Parametr1='ALL'
SET @@Paramter2='ALL'
==================
IF @@Paramter1='All'
SET @@Parametr='Column1'

IF @@Parametr2='All'
SET @@Paramter='Column2'

Select * from Table where Column1=@@Paramter1 and Column2=@@Parametr2

Но запрос не работает потому что @@Parametr1 или @@Parametr2 есть varchar , хотя
при Select * from Table where Column1=Column1 and Column2=@@Paramter2 срабатывает (где параметр равен к примеру 2012).


Были мысли типа того :

если два параметра то 4 комбинации

If @@Paramter1='All' and @@Paramter2='All'
Select * from Table

IF @@Paramter1='All' and @@Paramter2<>'All'
Select * from Table where Column1=@@Paramter2

IF @@Paramter1<>'All' and @@Paramter2='All'
Select * from Table where Column1=@@Paramter1

IF @@Paramter1<>'All' and @@Paramter2<>'All'
Select * from Table where Column1=@@Paramter1 and Column2=@@Paramter2

Вообщем вот такая мысль, хотелось бы услышать мнение опытных людей КАК Сделать красивее, правильнее и проще.
1 мар 12, 15:46    [12177697]     Ответить | Цитировать Сообщить модератору
 Re: Чудо запрос.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://www.sql.ru/faq/faq_topic.aspx?fid=114
1 мар 12, 15:50    [12177747]     Ответить | Цитировать Сообщить модератору
 Re: Чудо запрос.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Select * from Table where 
( @@Parametr1 = 'All' or Column1=@@Paramter1 ) 
and (  @@Parametr2 = 'All' or Column2=@@Paramter2 )
1 мар 12, 15:51    [12177756]     Ответить | Цитировать Сообщить модератору
 Re: Чудо запрос.  [new]
vertum
Member

Откуда:
Сообщений: 30
Respect.
1 мар 12, 15:59    [12177864]     Ответить | Цитировать Сообщить модератору
 Re: Чудо запрос.  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Гавриленко Сергей Алексеевич
Select * from Table where 
( @@Parametr1 = 'All' or Column1=@@Paramter1 ) 
and (  @@Parametr2 = 'All' or Column2=@@Paramter2 )
Для сравнения с Column1 и Column2 в общем случае надо бы
ещё два параметра добавить такого же типа, как и колонки

И сделать всё это в виде табличной inline функции
без всяких там IFов.
1 мар 12, 16:02    [12177892]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить