我正在尝试生成包含多个搜索过滤器的报告,我需要那些搜索过滤器能够将多个值用作搜索参数。
Create Proc [procedure_name](
@name nvarchar(50) null,
@center nvarchar(3)null,
@branch nvarchar(6)null
)
As
Begin
Select [column1], [column2], [column3], [column4]
from table1 a
left join table2 b
on a.cid=b.cid and a.acc=b.acc
Where @name is null or a.Name=@name
and @center is null or a.center=@center
and @branch is null or a.branch=@branch
End
我需要这些搜索参数才能采用多个值并将其过滤到同一表格中,即 而不是@name ='Mark'给出所有具有Mark的结果 我需要提供包含Mark,James和Adam的所有结果的@name ='Mark','James','Adam'。
答案 0 :(得分:0)
使用SplitString函数,例如:T-SQL split string
现在,如果您传递多个值(用逗号分隔),则您的查询可以过滤多个值。 @name ='马克,詹姆斯,亚当'
代替:
@name is null or a.Name=@name
使用:
@name is null or a.Name in (select Name from dbo.splitstring(@name))
PS:顺便说一句,当使用这种包罗万象的语句时,我总是在末尾添加 option(recompile),因此SQL引擎会根据您所使用的参数重新计算执行计划已经过去了。
答案 1 :(得分:0)
首先,您现有的逻辑是错误的。应该是:
where (@name is null or a.Name = @name) and
(@center is null or a.center = @center) and
(@branch is null or a.branch = @branch)
为您解决:
where (@name is null or a.Name in (select value from string_split(@name)) and
(@center is null or a.center in (select value from string_split(@center)) and
(@branch is null or a.branch in (select value from string_split(@branch))