2009-12-04 6 views
1

L'erreur est de retour lorsque la procédure stockée suivant est tenté d'exécuter:SQL Server 2000 « syntaxe incorrecte près du mot-clé « CASE » »

EXECUTE p_someProc 
--list of vars 
CASE WHEN @var1=1 AND @var2=1 THEN 3 
    WHEN @var2=1 THEN 2 
    WHEN @var1=1 THEN 1 END, 
--more vars 

Il existe d'autres fonctions CASE incluses, mais seulement une seule erreur est vomi qui pointe vers le premier cas.

Lorsque l'expression identique est exécutée dans une fonction PRINT, un résultat attendu est renvoyé.

declare @var1 bit set @var1 = 1 
declare @var2 bit set @var2 = 1 

print(CASE WHEN @var1=1 AND @var2=1 THEN 3 
    WHEN @var1=1 THEN 2 
    WHEN @var2=1 THEN 1 END) 

La sortie est '3'

Je suppose que je suis abusant de la fonction CASE en quelque sorte. Quelqu'un pourrait-il penser à une solution de contournement ou un moyen de résoudre ce problème?

Merci d'avance.

--Stan

Répondre

1

Comme JeremyMcGee fait allusion ci-dessus, vous devez effectuer une mission plutôt que d'essayer de passer l'affaire à l'exécutif, essayez quelque chose comme ce qui suit

Declare @varx int 
select @varx = CASE WHEN @var1=1 AND @var2=1 THEN 3 
    WHEN @var2=1 THEN 2 
    WHEN @var1=1 THEN 1 END 
EXECUTE p_someProc @varx 
+0

Merci. L'utilisation de CASE pour attribuer des valeurs a résolu le problème. – Stan

+0

np. Il est difficile de s'habituer à une construction de cas qui ne peut pas être utilisée pour le contrôle du flux. – cmsjr

1

Difficile à dire sans plus de code. Vérifiez que @ var1 et @ var2 ont été déclarés, peut-être?

Assurez-vous d'affecter le résultat du CASE à quelque chose aussi!

Questions connexes