如果不使用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
答案 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')
)