2011-05-27 13 views
7

¿Es posible utilizar el comando break en la sentencia case en mssql?break in case statement en T-SQL

Porque la condición se verifica con la expresión GO, en lugar de hacer la siguiente transición de CASE. ssip_miktar es 5, ssip_teslim_miktar es 0 y S74MIKTAR es 5

update set ssip_teslim_miktar= ssip_teslim_miktar+ 
CASE WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR-ssip_miktar 
WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-(ssip_miktar+ssip_teslim_miktar) 
WHEN [email protected] AND ssip_teslim_miktar=0 THEN @S74MIKTAR 
WHEN [email protected] AND ssip_teslim_miktar>0 THEN @S74MIKTAR-ssip_teslim_miktar 
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR 
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR 
END, 
@[email protected] 
     WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR-ssip_miktar 
     WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-(ssip_miktar+ssip_teslim_miktar) 
     WHEN [email protected] AND ssip_teslim_miktar=0 THEN @S74MIKTAR 
     WHEN [email protected] AND ssip_teslim_miktar>0 THEN @S74MIKTAR-ssip_teslim_miktar 
     WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR 
     WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR 
        ELSE 0 
     END 
where ssip_teslim_miktar<ssip_miktar 
+0

Por favor, mira lo siguiente ... Escribí mi código como comentario. – esquare

+0

¿Qué resultado obtiene? –

Respuesta

4

Esto no es necesario. THEN efectivamente actúa como un retorno o ruptura, por lo que la declaración se cortocircuita.

+0

¿Estás seguro? Lo intenté, pero no es así. – esquare

+4

¿Tal vez si publicó su código en la pregunta anterior? –

+0

conjunto ssip_teslim_miktar = ssip_teslim_miktar + CASE CUANDO ssip_miktar <@ S74MIKTAR Y ssip_teslim_miktar = 0 THEN @ S74MIKTAR-ssip_miktar CUANDO ssip_miktar <@ S74MIKTAR Y ssip_teslim_miktar> 0 THEN @ S74MIKTAR- (ssip_miktar + ssip_teslim_miktar) CUANDO ssip_miktar = @ S74MIKTAR Y ssip_teslim_miktar = 0 a continuación, @ S74MIKTAR cUANDO ssip_miktar = @ S74MIKTAR Y ssip_teslim_miktar> 0 THEN @ S74MIKTAR-ssip_teslim_miktar cUANDO ssip_miktar> @ S74MIKTAR Y ssip_teslim_miktar = 0 THEN @ S74MIKTAR cUANDO ssip_miktar> @ S74MIKTAR Y ssip_teslim_miktar> 0 THEN @ S74MIKTAR donde ssip_teslim_miktar esquare

5

Esto es SQL transaccional y no es iterativo. No requiere un descanso porque solo se evaluará una de las cláusulas when/else.

intente lo siguiente:

declare @test int 
set @test=1 
select @test = @test + 
    case 
     when 1=1 then 1 
     when 2=2 then 1 
     when 3=3 then 1 
     when 4=4 then 1 
     when 5=5 then 1 
     when 6=6 then 1 
     when 7=7 then 1 
     when 8=8 then 1 
     else 1 
     end 
select @test 

@test es sólo alguna vez 2

+0

¿Querías decir "no"? –

+0

@Phil. Gracias. Editado en consecuencia. –

8

No debería ser necesario utilizar un break porque las declaraciones de casos de SQL no cambian.

DECLARE @x int 

SET @x = 0 

SELECT CASE 
    WHEN @x = 0 THEN 'zero'  -- Only this line of the expression is evaluated 
    WHEN @x <> 0 THEN 'not-zero' 
    END