繁体   English   中英

如何使用可选搜索参数进行查询?

[英]How to Do a Query with Optional Search Parameters?

我的桌子上有这些栏;

Categ - int
WorkPlace - int
WorkPlace1 - int
AsignedAs - int

我正在使用C#

  1. 如果仅搜索参数之一不等于0,我想用OR选择所有行。我添加了一个默认值,以了解用户是否从组合框中进行选择。

  2. 我想按此顺序与AND进行选择:如果多个搜索参数不等于0(用户选择值),则像这样

     WHERE Categ = @categ AND WorkPlace = @WorkPlace (user select two values 

    其他为空或等于0

  3. 要么

     WHERE WorkPlace = @WorkPlace AND WorkPlace1 = @WorkPlace1 
  4. 要么

     WHERE Categ = @Categ AND WorkPlace = @WorkPlace1 

(用户选择这些值,并且不为空,因此我们在查询中添加and

等等....

所以我想检查值是否为空或不建立正确的查询。

请参阅Goran指出的用于处理可选值的链接-在这种情况下,如果用户未选择该选项,则需要将NULL传递给存储的proc。 如果您希望继续使用零(或其他某个值)来指示参数的不适用性,那么您可以修改查询,例如

WHERE 
   (COALESCE(@Categ, 0) = 0 OR Categ = @Categ) AND 
   (COALESCE(@WorkPlace, 0) = 0 OR WorkPlace = @WorkPlace) AND 
   (COALESCE(@WorkPlace1, 0) = 0 OR WorkPlace1 = @WorkPlace1) AND 
   (COALESCE(@AsignedAs, 0) = 0 OR AsignedAs= @AsignedAs) 

希望您有大致的想法!

您也可以使用CASE方法。 我发现这非常有用且容易,并且SQL Query Optimizer似乎针对这种情况选择了更好的执行计划:

WHERE CASE WHEN @Categ = 0 THEN 0 ELSE Categ END = CASE WHEN @Categ = 0 THEN 0 ELSE @Categ END
AND CASE WHEN @WorkPlace = 0 THEN 0 ELSE WorkPlace END = CASE WHEN @WorkPlace = 0 THEN 0 ELSE @WorkPlace END
AND CASE WHEN @WorkPlace1 = 0 THEN 0 ELSE WorkPlace1 END = CASE WHEN @WorkPlace1 = 0 THEN 0 ELSE @WorkPlace1 END
AND CASE WHEN @AsignedAs = 0 THEN 0 ELSE AsignedAs END = CASE WHEN @AsignedAs = 0 THEN 0 ELSE @AsignedAs END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM