You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL查询中基于条件动态注入筛选条件且保留单查询结构

存储过程多维度动态筛选实现方案

你可以直接通过NULL判断结合OR逻辑实现单查询结构下的动态条件注入,不需要拆分查询或者拼接动态SQL,完全适配你设定的参数互斥规则。
修改后的完整代码如下:

@EmployeeId int,
@DepartmentId int,
-- 其余原有参数如@CityId、@FromDate、@ToDate保持不变

SET @NewLeadForSales = (SELECT SUM(SaleStats) 
                        FROM SaleSummary AS SS (nolock) 
                        INNER JOIN CustomerSale AS CS ON SS.SaleId = CS.SaleId
                        WHERE CS.CityId = @CityId 
                          -- 动态适配员工/部门维度筛选
                          AND (
                               (@EmployeeId IS NOT NULL AND CS.EmployeeId = @EmployeeId)
                               OR 
                               (@DepartmentId IS NOT NULL AND CS.DepartmentId = @DepartmentId)
                          )
                          AND SS.Type = 'Lead' 
                          AND SS.Name = 'Sale' 
                          AND (DATEFROMPARTS(SS.SaleYear, SS.SaleMonth, 1) >= @FromDate 
                          AND DATEFROMPARTS(SS.SaleYear, SS.SaleMonth, 1) < @ToDate));

逻辑说明

  • 当查询员工维度时,@DepartmentId为NULL,部门维度的判断分支自动失效,仅员工筛选条件生效
  • 当查询部门维度时,@EmployeeId为NULL,员工维度的判断分支自动失效,仅部门筛选条件生效

性能优化建议

如果数据量较大,担心OR条件引发执行计划选择异常,可以在查询末尾增加OPTION (RECOMPILE)提示,每次执行会根据当前传入的参数重新生成最优执行计划,不会影响查询效率:

-- 在原有查询语句末尾添加
OPTION (RECOMPILE)

内容的提问来源于stack exchange,提问作者I Love Stackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:27:03