我希望能够使用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
答案 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并获得适当的性能指标。