在IF条件下组合条件

时间:2016-07-21 11:27:36

标签: sql tsql sql-server-2005

如果不使用IF

,我们不能在单个SQL中使用它
IF (@PPRODUCT_TYPE_ID != '0')   
    SELECT * FROM PRODUCT 
    WHERE 
        PRODNAME = @pName 
    AND 
        PRODUCT_TYPE_ID IN (SELECT DISTINCT ID FROM PPRODUCT_TYPE)
ELSE
    SELECT * FROM PRODUCT 
    WHERE PRODNAME = @pName 

2 个答案:

答案 0 :(得分:2)

一种方法是:

SELECT p.*
FROM PRODUCT 
WHERE PRODNAME = @pName AND
      (@PPRODUCT_TYPE_ID <> '0' AND
       PRODUCT_TYPE_ID IN (SELECT NUMBER FROM DBO.MAKE_TABLE_USING_COMMASEPERATED_LIST(@PPRODUCT_TYPE_ID) )
      ) OR
      ( (@PPRODUCT_TYPE_ID = '0' OR @PPRODUCT_TYPE_ID IS NULL);

但是,原始版本的性能可能会更好,因为两个单独的,更简单的查询比一个大型查询更容易优化(特别是当查询使用参数时)。

答案 1 :(得分:1)

试试这个

SELECT * FROM PRODUCT 
WHERE 
    PRODNAME = @pName 
AND 
    (
    (PRODUCT_TYPE_ID IN (SELECT DISTINCT ID FROM PPRODUCT_TYPE) and @PPRODUCT_TYPE_ID != '0')
     OR
     (@PPRODUCT_TYPE_ID = '0')
     )