SSRS搜索多个参数允许一些空白

时间:2017-08-31 21:08:03

标签: sql sql-server reporting-services ssrs-2008-r2

我希望能够使用4个参数中的任何一个来搜索订单的位置。 在查找一组完整参数时,我的工作原理是什么,但当它们中的任何一个留空时,不会返回任何结果。 (所有4个参数都声明为varchar(255))

select
  ContactName,
  ContactEmail,
  ContactPhone,
  OriginCity,
  OriginState,
  OriginZip,
  DestCity,
  DestState,
  DestZip
from Orders
where 
  (OriginCity in (@Origin)
  or OriginState in (@OriginS))
  and 
  (DestCity in (@Dest)
  or DestState in (@DestS))
order by 
  OriginCity,
  OriginState,
  DestCity,
  DestState

2 个答案:

答案 0 :(得分:0)

您需要在WHERE子句中添加一个额外的OR条件来处理NULL参数。所以你的WHERE子句应该是这样的:

WHERE 
 ( 
  (OriginCity in (@Origin) OR @Origin IS NULL )
     OR 
  (OriginState in (@OriginS) OR @OriginS IS NULL )
 )
 AND 
 (
  (DestCity in (@Dest) OR @Dest IS NULL )
    OR 
  (DestState in (@DestS) OR @DestS IS NULL )
 )

要避免表扫描,请在查询的最后添加OPTION(RECOMPILE)。

答案 1 :(得分:0)

您可以尝试使用动态SQL来处理此问题。请参阅链接 - http://www.sommarskog.se/dynamic_sql.html并获得适当的性能指标。