【发布时间】:2014-09-03 11:39:38
【问题描述】:
这是我的桌子
create table Table1 (Id int, ...some fields... , CategoryId int, ProfileId int)
我想编写一个 SP(存储过程),它会根据传递给 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
基本上,我想要实现的是当在@MediaType1 变量中传递“0”时,它应该返回所有具有类别 (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 ,',')))
但即使这样也行不通。任何帮助将不胜感激
【问题讨论】:
标签: sql sql-server stored-procedures sql-server-2012