如何使用可以采用多个搜索值的搜索过滤器?

时间:2019-06-20 08:39:28

标签: sql sql-server sql-server-2012

我正在尝试生成包含多个搜索过滤器的报告,我需要那些搜索过滤器能够将多个值用作搜索参数。

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'。

2 个答案:

答案 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))