2012-06-27 17 views
10

Quiero usar CASE en mi procedimiento almacenado. Estoy recibiendo un error de sintaxis en mi código:Cómo usar el Switch en SQL Server

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

Cuando se ejecuta, estoy recibiendo:

sintaxis incorrecta cerca de '='.

en esta línea aquí:

@selectoneCount = @selectoneCount + 1 

cerca de la igualdad.

En realidad estoy obteniendo el valor de retorno de otra sp en @temp y luego @temp = 1, entonces quiero aumentar el conteo de @SelectoneCount por 1, y así sucesivamente. Por favor, hágamelo saber cuál es la sintaxis correcta.

+2

'CASE' es un * expresión * que devuelve una *valor*. No tengo idea de lo que estás tratando de hacer aquí, quizás cuéntanos el objetivo general y luego coloca el código anterior dentro de una muestra más grande para establecer el contexto. –

+0

Esta respuesta es útil en caso de que realmente desee hacer un flujo lógico en lugar de seleccionar una expresión http://stackoverflow.com/a/14760234/74585 –

Respuesta

29

El CASE es solo un "interruptor" para devolver un valor - no para ejecutar un bloque de código completo.

Es necesario cambiar el código para algo como esto:

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

Si @temp se ajusta a ninguno de esos valores (1 o 2), a continuación, que pondremos en un NULL

+0

Tanx para su respuesta, pensé que 'caso' en sqlserver puede realizar el mismo cambio- case in C# $ ( –

+0

use 'ELSE @ selectoneCount' * si * desea crear un caso predeterminado cuando @Temp no es 1 o 2 y @selectoneCount no cambia. – woodvi

3

Esta es una declaración de selección, por lo que cada rama del caso debe devolver algo. Si desea realizar acciones, simplemente use un if.

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

    select @selectoneCount 
1

En realidad estoy obteniendo el valor de retorno de otra sp en @temp y luego @temp = 1, entonces quiero incluir el recuento de @SelectoneCount en 1, y así sucesivamente. Por favor, hágame saber cuál es la sintaxis correcta.

¿Qué hay de malo en:

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

(Aunque esto no reek de ser el código de procedimiento - no suele ser la mejor manera de utilizar SQL)

+1

no hay nada de malo en if pero tengo 15-20 condiciones así que quería usar el interruptor allí –

+1

@RamSingh - no hay cambio * declaración * en el lenguaje SQL. Como otros han indicado, puede utilizar una expresión 'CASE' * *, pero tiene que calcular y devolver un valor escalar. –

+1

bien gracias, significa que tengo que usar si no para mi situación. –

Cuestiones relacionadas