WHERE IS NULL, IS NOT NULL or NO WHERE clause depending on SQL Server parameter value

前端 未结 7 2296
被撕碎了的回忆
被撕碎了的回忆 2020-12-02 22:57

I have a stored procedure in SQL Server 2000 that performs a search based on parameter values. For one of the parameters passed in, I need a different WHERE cla

相关标签:
7条回答
  • 2020-12-02 23:35

    This kind of logic could be implemented using EXISTS:

    CREATE TABLE tab(a INT, b VARCHAR(10));
    INSERT INTO tab(a,b) VALUES(1,'a'),(1, NULL),(NULL, 'a'),(2,'b');
    

    Query:

    DECLARE @a INT;
    
    --SET @a = 1;    -- specific NOT NULL value
    --SET @a = NULL; -- NULL value
    --SET @a = -1;   -- all values
    
    SELECT *
    FROM tab t
    WHERE EXISTS(SELECT t.a INTERSECT SELECT @a UNION SELECT @a WHERE @a = '-1');
    

    db<>fiddle demo

    It could be extended to contain multiple params:

    SELECT *
    FROM tab t
    WHERE EXISTS(SELECT t.a INTERSECT SELECT @a UNION SELECT @a WHERE @a = '-1')
      AND EXISTS(SELECT t.b INTERSECT SELECT @b UNION SELECT @a WHERE @b = '-1');
    
    0 讨论(0)
提交回复
热议问题