繁体   English   中英

不管搜索条件和参数如何变化,都保持选择查询不变

[英]Keeping the select query unmodified regardless of the search criteria and parameter changes

我正在使用DML和Selects的所有SQL脚本管理静态类。

但是,在某些情况下,搜索可能需要多个搜索条件。

例如

Select items from table_items where capacity = 10 and type = 'metal'

如果未提及容量或类型,则查询应返回所有项目,

Select items from table_items

这里有几个组合。

  1. 容量可以为空输入
  2. 类型可以为空输入
  3. 两者都可以为空输入

这是否意味着我的SQL脚本静态类中必须有3个不同的SQL查询? 并通过case / if-else验证上述每个组合? 对我来说没有意义。 特别是,该应用程序是使用数据访问实体模型在3层体系结构中单独构建的。

也许我完全忘记了根源/基础 我不想编写动态sql查询。

在这种情况下,什么是一个好的解决方法?

编辑:原始查询

    public static readonly string SqlGetItemsBy_ID_Capacity_Type = "SELECT TT.[ID], " +
    "TT.[CAPACITY], " +
    "TT.[TYPE], " +                  
    //some code here
                        "FROM [ITEMS]  AS TT " +                    
                        "WHERE //some code here +
    "AND TT.[CAPACITY] = CASE WHEN 0 = @Capacity" + //+ numCapacitySearch.Value +
                        "THEN TT.[CAPACITY] ELSE @Capacity END " + //+ numCapacitySearch.Value +
    "AND TT.[TYPE] = CASE WHEN ??? IS NULL THEN TT.[TYPE] ELSE @Type END" ;

参考??? 与NULL比较时...

如果提交的值为null,则返回该列的case语句将为您提供所有这样的行。

Select 
  items 
from 
  table_items 
where 1=1 
  and capacity = case when @capvalue is null then capacity else @capvalue end 
  and type = case when @typevalue is null then type else @typevalue end 

小提琴

请注意,如果将值设置为null,则将返回所有行。 如果将值设置为1 ,则仅返回该行。

您可以在查询中这样做:

Select items 
from table_items 
where (capacity <> null or capacity = 10) 
       AND 
      (type <> null or type = 'metal') 

或者,您也可以用if elses一些方法进行编程

并且,如果您使用的是像实体框架这样的ORM。 您有动态查询,通常可以逐步“构建”查询。

暂无
暂无

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

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