[英]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
这里有几个组合。
这是否意味着我的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.