【问题标题】:SQL Filter in the where clausewhere 子句中的 SQL 过滤器
【发布时间】:2016-07-02 10:50:27
【问题描述】:

我不确定如何 100% 解决这个问题,但我认为这很可能是使用动态 SQL 的问题。用户希望能够使用 GUI 上的复选框来传递变量。并非所有复选框都会在传递数据时被选中。一次只检查几个。无论如何,我投票给单选框,所以现在的问题是我必须根据他们传入的已检查变量进行过滤。所以在 WHERE 子句中需要动态过滤。我很少使用动态 SQL,而且我不是 DBA。因此,如果我用数据传入两个值,其中一个为 null,当其中一个值为空或 null 时,如何防止它在 Where 子句中过滤。

类似这样的:

DECLARE
@obj1 AS NVARCHAR(10) = 'data',
@obj2 AS NVARCHAR(10) = 'data',
@obj3 AS NVARCHAR(10) = '',

SELECT something FROM Table WHERE 
IF @obj1 is not null then filter,
If @obj2 is not null then filter,
If @obj3 is not null then filter

【问题讨论】:

    标签: sql dynamic filtering where


    【解决方案1】:

    使用OR:

    SELECT * 
    FROM Table 
    WHERE (@obj1 IS NULL OR ( ... filter with @obj1 here  ) ) AND
          (@obj2 IS NULL OR ( ... filter with @obj2 here  ) ) AND
          (@obj3 IS NULL OR ( ... filter with @obj3 here  ) ) 
    

    例如,如果@obj1 是NULL,那么与@obj1 相关的相应谓词将从WHERE 子句中删除。

    【讨论】:

    • @Holmes 很高兴我能够提供帮助并欢迎来到 Stack Overflow。如果它帮助您解决问题,请将此或任何其他答案标记为已接受。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2020-03-21
    • 2011-02-25
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多