Problème de cas dans une instruction SQL avec une instruction IN

J'ai suivi une simple déclaration de cas

CASE WHEN @SPOID is not null THEN (176) ELSE (SELECT designationID from setupdesignations where reportto = 99) END 

Lorsque la clause else de cette instruction s'exécute, elle me donne l'erreur suivante

 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

J'utilise cette instruction dans la clause IN Je m'attendais à ce que plusieurs résultats soient returnnés dans un autre cas mais cela me donne l'erreur ci-dessus. Si je supprime l'instruction case et exécute la partie else dans la requête, alors j'obtiens le résultat attendu

Vous ne pouvez pas utiliser une sous-sélection en tant qu'expression dans une correspondance CASE, elle attend une seule valeur. Au lieu de cela?

 where (@SPOID is not null and infield = 176) or (@SPOID is null and infield in (SELECT designationID from setupdesignations where reportto = 99)) 

Bien que vous utilisiez la clause IN , l'instruction CASE n'autorise qu'une ligne comme instruction de return.

Vous devrez find une autre façon de le faire.

Vous pouvez essayer d'utiliser une requête dynamic pour atteindre votre objective final. Le lien suivant pourrait vous pointer dans la bonne direction – vérifiez le dernier post: http://forums.devx.com/showthread.php?t=150247

Essayez de changer votre clause in pour:

 ... in (SELECT designationID from setupdesignations where reportto = 99 and @SPOID is not null UNION SELECT 176 where @SPOID is null)