如何在非动态SQL中根据参数值条件添加WHERE子句条件
非动态SQL实现条件按需生效的方案
直接用逻辑表达式就能解决,不用折腾动态SQL。把原查询里的AND emp.isdeleted = @deleted替换成以下逻辑判断即可:
SELECT * FROM Employee WHERE emp.id = @ID AND emp.Name = @Name AND (emp.isdeleted = @deleted OR @deleted IS NULL)
逻辑说明:
- 当
@deleted不为NULL时,@deleted IS NULL为假,此时条件等价于emp.isdeleted = @deleted,完全匹配你的需求; - 当
@deleted为NULL时,@deleted IS NULL为真,整个括号内的条件直接成立,相当于这个过滤条件被自动跳过,不会对查询结果产生限制。
这种写法兼容绝大多数主流SQL数据库(比如SQL Server、MySQL、PostgreSQL等),而且完全不需要拼接动态SQL,很适合复杂查询场景。
内容的提问来源于stack exchange,提问作者Amar Srivastava
相关产品推荐
相关产品推荐

