我在存储过程中定义了3个参数@A,@B,@C
  后面我在写筛选语句的时候需要判断这3个参数是否为空,为空的话WHERE条件中就不加,不为空就加
  例:如果都不为空
      SELECT * 
     FROM TABLE1
     WHERE A= @A 
       AND B=@B 
       AND C=@C
  如果@B为空,则语句为
      SELECT * 
     FROM TABLE1
     WHERE A= @A
       AND C=@C
实现这样需要怎么写啊?

解决方案 »

  1.   

    SELECT * 
        FROM TABLE1 
        WHERE (1 = (case when @A is Null then 1 else 0 end) or (A= @A )) 
          AND (1 = (case when @B is Null then 1 else 0 end) or (B= @B ))  
          AND (1 = (case when @C is Null then 1 else 0 end) or (C= @C )) 
      

  2.   

    如果@A为NULL,则形成一个永真条件 1=1如此跟 @A=A进行 or,那么永远是真,相当于忽略了@A条件。
      

  3.   

    SELECT * FROM TABLE1
     WHERE A=isnull(@A, A)
       AND B=isnull(@B, B)
       AND C=isnull(@C, C)