2012-06-27 9 views
10

Desidero utilizzare CASE nella procedura memorizzata. Io sono sempre un po 'di errore di sintassi nel mio codice:Come utilizzare Switch in SQL Server

select 
    case @Temp 
    when 1 then (@[email protected]+1) 
    when 2 then (@[email protected]+1) 
    end 

Durante l'esecuzione, sto ottenendo:

sintassi in prossimità di '=' corretto.

a questa linea qui:

@selectoneCount = @selectoneCount + 1 

vicino alla parità.

In realtà sto ottenendo il valore di ritorno da un altro sp in @temp e quindi @temp = 1, quindi voglio aumentare il conteggio di @SelectoneCount di 1 e così via. Per favore fatemi sapere qual è la sintassi corretta.

+2

'CASE' è un * * espressione che restituisce un *valore*. Non ho idea di cosa tu stia cercando di fare qui - magari dirci l'obiettivo generale, e quindi inserire il codice sopra all'interno di un campione più ampio per impostare il contesto? –

+0

Questa risposta è utile nel caso in cui si desideri eseguire il flusso logico piuttosto che selezionare un'espressione http://stackoverflow.com/a/14760234/74585 –

risposta

29

Il CASE è solo un "interruttore" su restituire un valore - non eseguire un intero blocco di codice.

è necessario modificare il codice per qualcosa di simile:

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

Se @temp è impostato su nessuno di questi valori (1 o 2), allora avrai indietro un NULL

+0

Tanx per la risposta, ho pensato che "caso" in sqlserver può azioni lo stesso switch- caso in C# $ ( –

+0

usare 'ELSE @ selectoneCount' * se * si desidera creare un caso predefinito quando @Temp non è 1 o 2 e @selectoneCount non cambia. – woodvi

3

Questa è un'istruzione select, quindi ogni ramo del caso deve restituire qualcosa. Se vuoi eseguire azioni, usa solo if.

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

    select @selectoneCount 
1

In realtà sto ottenendo il valore di ritorno da un altro sp in @temp e quindi @temp = 1, quindi voglio aumentare il conteggio di @SelectoneCount di 1 e così via. Per favore fatemi sapere qual è la sintassi corretta.

Cosa c'è di sbagliato con:

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

(Anche se questo non sapevano di essere codice procedurale - di solito non il modo migliore per utilizzare SQL)

+1

non c'è niente di sbagliato con se ma ho 15-20 condizioni quindi volevo usare l'interruttore –

+1

@RamSingh - non c'è nessuna istruzione * switch * in linguaggio SQL Come altri hanno indicato, è possibile usare un'espressione 'CASE' * *, ma deve calcolare e restituire un valore scalare. –

+1

ok grazie, significa che devo usare se altro per la mia situazione. –

Problemi correlati