2016-07-21 1 views
2

Je souhaite vérifier deux conditions contradictoires sur une clause WHERE pour un même champ à l'aide de CASE;Contrôles de conditions contradictoires sur l'emplacement d'une instruction

Si j'extrais la chose que je veux, montre ci-dessous

WHERE FULFILMENT_STATUS_CODE != 'CNL' 
WHERE FULFILMENT_STATUS_CODE = 'FUL' 

Ils je sens essayé (et veulent) comme suit, mais je me demande comment avoir! = Dans sa

WHERE 
    FULFILMENT_STATUS_CODE = 
    CASE @pFILTER_TYPE 
     WHEN 1 THEN 'CNL' 
     WHEN 2 THEN 'FUL' 
    END 

Répondre

3

Don « t utiliser CASE dans un WHERE mais OR et AND:

WHERE 
    (@pFILTER_TYPE = 1 AND FULFILMENT_STATUS_CODE <> 'CNL') 
OR 
    (@pFILTER_TYPE = 2 AND FULFILMENT_STATUS_CODE = 'FUL') 

Mais au lieu d'évaluer le paramètre pour chaque enregistrement, vous pouvez également utiliser un IF...ELSE dans cette procédure stockée avec deux requêtes différentes. C'est plus bavard mais aussi plus efficace.