如何编写单条动态SQL实现用户表条件检索或全量返回
动态多条件过滤的单条SQL实现
直接用以下SQL语句即可满足所有需求,假设传入的参数分别为@p_username(对应UI传入的USERNAME)、@p_isactive(对应ISACTIVE)、@p_ismanager(对应ISMANAGER):
SELECT * FROM USERS WHERE (@p_username IS NULL OR @p_username = '' OR USERNAME = @p_username OR EMAIL = @p_username) AND (@p_isactive IS NULL OR ISACTIVE = @p_isactive) AND (@p_ismanager IS NULL OR ISMANAGER = @p_ismanager)
逻辑说明
- 需求1场景:当
@p_username='Alex'、@p_isactive=FALSE、@p_ismanager=TRUE时,三个条件分支都会生效:USERNAME或EMAIL等于'Alex',同时ISACTIVE为FALSE、ISMANAGER为TRUE,和预期的SQL效果完全一致。 - 需求2场景:当
@p_username为空或null,@p_isactive=FALSE、@p_ismanager=TRUE时,USERNAME对应的条件直接成立(相当于跳过校验),只过滤ISACTIVE和ISMANAGER字段,返回符合状态的所有用户。 - 需求3场景:当三个参数都为空或null时,所有WHERE条件都自动成立,查询返回表中全部数据。
这种写法的核心是利用参数为空时条件恒成立的特性,实现动态开启/关闭对应字段的过滤逻辑,用单条SQL覆盖所有场景。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

