我正在管理一个包含所有用于 DML 和 Selects 的 SQL 脚本的静态类。
但是,有一种情况是搜索可以采用多个搜索条件。
例如
Select items from table_items where capacity = 10 and type = 'metal'
当未提及容量或类型时,查询应返回所有项目,
Select items from table_items
这里有几个组合。
- 容量可以为空输入
- 类型可以为空输入
- 两者都可以是空输入
这是否意味着我的 SQL Script 静态类中必须有 3 个不同的 SQL 查询?并通过 case/if-else 验证上述每个组合?对我来说没有意义。特别是应用程序是使用数据访问、实体模型分别在三层架构中构建的。
也许我完全忘记了根源/基础。我不想编写动态 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 比较时的参考...