SQL中如何通过变量@UseClarifiedChangeType动态启用/关闭指定查询条件
实现方案
有两种常用的实现方式,你可以根据业务场景选择:
方案1:WHERE条件直接加逻辑判断(最简写法)
直接修改原来的过滤条件即可,不需要调整现有SQL的整体结构:
AND (@UseClarifiedChangeType != 1 OR ISNULL(CHT.ClarifiedChangeType, ECH.ChangeType) IN ('Joining', 'Promotion', 'Internal Move'))
逻辑说明:
- 当
@UseClarifiedChangeType取值不为1时,@UseClarifiedChangeType != 1条件成立,OR连接的整组条件自动为真,相当于这行过滤规则未启用 - 仅当
@UseClarifiedChangeType取值为1时,才会执行后面的IN判断逻辑,匹配指定的变更类型
方案2:动态SQL拼接(高性能写法)
如果你的查询涉及大表、对性能要求较高,推荐用动态SQL的方式,可以避免参数嗅探问题,生成最优执行计划:
DECLARE @SQL NVARCHAR(MAX) -- 拼接基础查询逻辑(替换为你自己的原有SQL) SET @SQL = N' SELECT -- 你的查询字段 FROM ECH -- 原有JOIN逻辑,比如: LEFT JOIN CHT ON ECH.ChangeTypeId = CHT.ChangeTypeId WHERE 1 = 1 -- 原有其他过滤条件 ' -- 仅当变量为1时拼接对应过滤条件 IF @UseClarifiedChangeType = 1 BEGIN SET @SQL = @SQL + N'AND ISNULL(CHT.ClarifiedChangeType, ECH.ChangeType) IN (''Joining'', ''Promotion'', ''Internal Move'') ' END -- 执行动态SQL EXEC sp_executesql @SQL
注意:动态SQL里的单引号需要转义,所以字符串值前后要用两个单引号包裹。
内容的提问来源于stack exchange,提问作者Eugene Sukh
相关产品推荐
相关产品推荐

