Вот мой столПоисковый фильтр на двух полях на основе при условии
create table Table1 (Id int, ...some fields... , CategoryId int, ProfileId int)
Я хочу написать SP (хранимые процедуры), который даст мне найти результаты из таблицы на основе параметров, передаваемых в СП. Вот моя процедура
Create proc Search
(
@MediaType1 varchar(1000),
@MediaType2 varchar(1000),
@MediaType3 varchar(1000)
)
as
begin
select * from table
where
case when @MediaType1 = '' then 1 else CategoryId end in
(select case when @MediaType1 = '' then 1 else Splvalue end
from dbo.Split(case @MediaType1 when '0,' then '1,2,3,4' when '' then '1,' else @MediaType1 end,','))
and
case when @MediaType2 = '' then 1 else ProfileId end in
(select case when @MediaType2 = '' then 1 else Splvalue end
from dbo.Split(case @MediaType2 when '0,' then '2,12,13' when '' then '1,' else @MediaType2 end,','))
and
case when @MediaType3 = '' then 1 else ProfileId end in
(select case when @MediaType3 = '' then 1 else Splvalue end
from dbo.Split(case @MediaType3 when '0,' then '1,14,15,16' when '' then '1,' else @MediaType3 end,','))
end
В общем, что я хочу достичь, когда «0» передается в переменной @ MediaType1, он должен вернуть все записи, которые имеют категорию (1.2.3.4) еще надо только эта категория, которая передается (например, 3) иначе, если ее пробел, она должна показывать все записи. То же самое для @ MediaType2 и @ MediaType3, за исключением того, что они должны проверять ProfileId. Условие также состоит в том, что все три или два или один из параметров могут быть пустыми, мне нужно обработать их и показать отфильтрованные записи.
Мой предыдущий запрос работает только в том случае, если один параметр передан и все остальные пусты. Я также пробовал
where
(@MediaType1 <> '' and Category in (select Splvalue from dbo.Split(@MediaType1,',')))
or
(@MediaType2 <> '' and ProfileId in (select Splvalue from dbo.Split(@MediaType2 ,',')))
or
(@MediaType3 <> '' and ProfileId in (select Splvalue from dbo.Split(@MediaType3 ,',')))
но даже это не работает. Любая помощь будет оценена
Извините мат, который работал для отдельных параметров но не для нескольких, я прошел 4 в MediaType1, он дал мне записи категории 4, я прошел 16 в MediaType3, мне дали 16, но когда я прошел оба, он дал мне пусто – Hitesh
Вы хотите сделать это с помощью OR вместо AND для каждого mediaType? Обновлен ответ. – Bulat
ну, просто открыли все, теперь фильтры не работают, все видимо каждый раз – Hitesh