Instruction de CAS, avec DANS dans la clause where
Je suis en train de créer la clause where suivante:
AND CASE @SomePRarmeter
WHEN 'this' THEN
user_id IN (SELECT * FROM dbo.func_Id1(@User))
WHEN 'that' THEN
user_id IN (SELECT user_id from dbo.func_Ids2(@OrgsForReporter)
END
Mais j'obtiens une erreur: syntaxe Incorrecte près du mot clé 'DANS' (dans la première condition) , bien que séparément les deux de ces conditions de travail. Quelle serait la bonne façon de faire une telle déclaration de travaux?
Merci!
Avez-vous essayé de mettre des parenthèses autour de la 3e et 5e lignes?
Comme ça - (user_id IN (SELECT * FROM dbo.func_getReportsToUserId(@User)))? Il ne fonctionne pas non plus, m'a donné la même erreur DANS et puis à propos de ')'
NM mon dernier commentaire. La clause prévoit une valeur. L'expression n'est pas évalué à une valeur.
Comme ça - (user_id IN (SELECT * FROM dbo.func_getReportsToUserId(@User)))? Il ne fonctionne pas non plus, m'a donné la même erreur DANS et puis à propos de ')'
NM mon dernier commentaire. La clause prévoit une valeur. L'expression n'est pas évalué à une valeur.
OriginalL'auteur Masha | 2010-11-04
Vous devez vous connecter pour publier un commentaire.
Essayer
+1 Bien mieux qu'un cas compliqué! Peut-être changer la
select *
enselect user_id
(bien qu'il ne compte pas si la fonction ne retourne qu'une seule colonne)Cela a fonctionné, merci beaucoup!
OriginalL'auteur jthg
Vous faites select * dans une sous-requête. Vous avez besoin de retourner une seule colonne:
à ceci:
oups, oui mon mauvais.
le retour de la table a une colonne, et je l'ai changé pour le nom, mais il n'a pas aidé
OriginalL'auteur kemiller2002
Cas, la déclaration doit se traduire par une valeur, pas une expression. Si cela ne fonctionne pas:
Mais cela fonctionne;
La valeur peut être le résultat d'une sous-requête. Donc, une solution serait de réécrire le
where
clause comme:Maintenant, elle renvoie le nombre de lignes correspondantes. Vous pouvez ensuite filtrer avec
case ... end > 1
.OriginalL'auteur Andomar
J'avais pause: les
OriginalL'auteur Joe Stefanelli
CASE ... END
renvoie une expression, pas une pièce de littéral du code SQL. Plutôt que:... à vous de les utiliser ceci:
Dans votre cas, vous pouvez faire quelque chose sur cette ligne:
OriginalL'auteur Álvaro González