web-dev-qa-db-fra.com

Comment utiliser Switch dans SQL Server

Je souhaite utiliser CASE dans ma procédure stockée. Je reçois une erreur de syntaxe dans mon code:

select 
   case @Temp
   when 1 then (@selectoneCount=@selectoneCount+1)
   when 2 then (@selectoneCount=@selectoneCount+1)
   end

En courant, je reçois:

syntaxe incorrecte près de '='.

à cette ligne ici:

@selectoneCount = @selectoneCount + 1

près de l'égal.

En fait, je reçois la valeur de retour d'un autre sp dans @temp, puis si @temp = 1, je veux incrémenter le nombre de @SelectoneCount de 1, etc. Veuillez me faire savoir quelle est la syntaxe correcte.

18
Ram Singh

Le CASE est juste un "commutateur" pour retourner une valeur - pour ne pas exécuter un bloc de code entier.

Vous devez changer votre code en quelque chose comme ceci:

SELECT 
   @selectoneCount = CASE @Temp
                         WHEN 1 THEN @selectoneCount + 1
                         WHEN 2 THEN @selectoneCount + 1
                     END

Si @temp n'est défini sur aucune de ces valeurs (1 ou 2), vous obtiendrez alors un NULL

41
marc_s

Ceci est une instruction select, donc chaque branche du cas doit retourner quelque chose. Si vous souhaitez effectuer des actions, utilisez simplement un if.

3
cjk
    select 
       @selectoneCount = case @Temp
       when 1 then (@selectoneCount+1)
       when 2 then (@selectoneCount+1)
       end

   select  @selectoneCount 
2
Raab

En fait, j'obtiens la valeur de retour d'un autre sp dans @temp puis @temp = 1, puis je veux augmenter le nombre de @SelectoneCount de 1 et ainsi de suite. Veuillez me faire savoir quelle est la syntaxe correcte.

Quel est le problème avec:

IF @Temp = 1 --Or @Temp = 2 also?
BEGIN
    SET @SelectoneCount = @SelectoneCount + 1
END

(Bien que cela puisse être un code procédural - ce n'est généralement pas la meilleure façon d'utiliser SQL)

1