none
If anidado

    Question

  • Hola tengo un problema con el siguiente codigo

    If (@Norm_6U = 'Si')
    BEGIN
    /* Se da un error aca la variable @LineaC es mayor 0 sin embargo no lo reconoce asi y se pasa a la siguiente else*/
    	IF (@LineaC) > 0
    		BEGIN
    			 Set @Resultado = (
    	Select 
    		Case When @Ent_DD <= 1 Then 'Aprobado A'
    			 When @Ent_DD > 1 Then 'Aprobado B' End As Resultado)
    			 Set @Observacion = (
    	Select 
    		Case When @Ent_DD <= 1 Then '# ent. Con DD<= 1'
    			 When @Ent_DD > 1 Then '# ent. Con DD > 1' End As Observacion)	
    		END
    /******************************************************************************************************************/		
    	ELSE
    			Set @Resultado = (
    	Select 
    		Case When (@ConsTC)/(@LineaC + @ConsTC) < 0.25 Then 'Aprobado A'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.25 And (@ConsTC)/(@LineaC + @ConsTC) < 0.75 Then 'Aprobado B'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.75 Then 'Aprobado B' End As Resultado)
    			Set @Observacion = (
    	Select 
    		Case When (@ConsTC)/(@LineaC + @ConsTC) < 0.25 Then 'Ratio de Utilización < 25%'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.25 And (@ConsTC)/(@LineaC + @ConsTC) < 0.75 Then '25% < Ratio de Utilización <= 75%'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.75 Then 'Ratio de Utilización >= 75%' End As Observacion)
    END
    ELSE
    /* Se da un error aca la variable @ReporteU es igual 0 sin embargo no lo reconoce asi y se pasa a la siguiente else*/
    	If (@ReporteU) = 0
    		BEGIN
    			Set @Resultado = 'Aprobado A'
    			Set @Observacion = 'Sin Reporte Ultimo periodo'
    		END
    /********************************************************************************************************************/		
    	Else
    		If (@DDP_U = 'Si')
    		BEGIN
    			If (@0Norm_U = 'Si')
    			BEGIN
    					Set @Resultado = (
    			Select Case When @DDV_3U > 0 Then 'Rechazado'
    						When @DDV_3U = 0 Then 'Observado' End As Resultado)
    					Set @Observacion = (
    			Select Case When @DDV_3U > 0 Then 'Tiene DD Venc, en alguno de los 3 ultimos periodos'
    						When @DDV_3U = 0 Then 'No DD Venc, en alguno de los 3 ultimos periodos' End As Observacion)
    			END
    			Else
    					Set @Resultado = (
    		Select 'Rechazado' As Resultado)
    					Set @Observacion = (
    		Select '=0% Normal (último periodo)' As Observacion)
    		END
    		Else
    			IF (@CPP_U = 'Si')
    				BEGIN
    					Set @Resultado = (
    			Select Case When @DDVig_TC <= 200 Then 'Observado'
    						When @DDVig_TC > 200 Then 'Rechazado' End As Resultado )
    					Set @Observacion = (
    			Select Case When @DDVig_TC <= 200 Then 'DD Vig. de cons TC <= 200'
    						When @DDVig_TC > 200 Then 'DD Vig. de cons TC > 200' End As Observacion )
    				END
    			Else
    					Set @Resultado = (	
     		Select 
    		Case When (@ConsTC)/(@LineaC + @ConsTC) < 0.25 Then 'Aprobado A'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.25 And (@ConsTC)/(@LineaC + @ConsTC) < 0.75 Then 'Aprobado B'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.75 Then 'Observado'
    			 Else 'Aprobado B' End As Resultado)
    					Set @Observacion = (	
     		Select 
    		Case When (@ConsTC)/(@LineaC + @ConsTC) < 0.25 Then 'Ratio de Utilización < 25%'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.25 And (@ConsTC)/(@LineaC + @ConsTC) < 0.75 Then '25% < Ratio de Utilización <= 75%'
    			 When (@ConsTC)/(@LineaC + @ConsTC) >= 0.75 Then 'Ratio de Utilización >= 75%'
    			 Else 'No existe informacion LCTC' End As Observacion)
    
    			 
    Select @codigo As CodSBS, 
     @Norm_6U As Norm_6U, 
     @Norm_U As Norm_U, 
     @DDP_U As DDP_U,
     @CPP_U As CPP_U, 
     @DDV_3U As DDV_3U, 
     @LineaC As LineaC, 
     @ConsTC As ConsTC, 
     @DD_U As DD_U, 
     @Ent_DD As Ent_DD, 
     @DDVig_TC As DDVig_TC, 
     @0Norm_U As [0Norm_U],
     @ReporteU As Reporte_Ult,
     @Resultado As Resultado,
     @Observacion As Observacion
     
     
    go
    

    El problema es que el codigo se ejecuta correctamente, pero el erro se da en la logica las variables tiene el valor especificado sin embargo en el if no lo reconoce y lo evalua como diferente 

    Thursday, October 21, 2010 7:43 PM

Answers

  • Creo que tu problema está en los bloques "ELSE". Por la forma en que tienes indentado el código fuente, da la sensación de que quieres que se ejecuten varias líneas de código dentro de los ELSE. Pero no les has puesto BEGIN...END para agrupar dichas líneas, por lo que sólo la primera de ellas se ejecuta en el ELSE y el resto pasan a ejecutarse en el nivel de anidación anterior. Esto es lícito y no impide la ejecución del código, pero por supuesto hace fallar toda la lógica de ejecución que tenías prevista.

     

    • Marked as answer by JAIMARU Friday, October 22, 2010 2:06 PM
    Friday, October 22, 2010 3:19 AM

All replies

  • Creo que tu problema está en los bloques "ELSE". Por la forma en que tienes indentado el código fuente, da la sensación de que quieres que se ejecuten varias líneas de código dentro de los ELSE. Pero no les has puesto BEGIN...END para agrupar dichas líneas, por lo que sólo la primera de ellas se ejecuta en el ELSE y el resto pasan a ejecutarse en el nivel de anidación anterior. Esto es lícito y no impide la ejecución del código, pero por supuesto hace fallar toda la lógica de ejecución que tenías prevista.

     

    • Marked as answer by JAIMARU Friday, October 22, 2010 2:06 PM
    Friday, October 22, 2010 3:19 AM
  • Gracias ya funciona, es un detalle a tomar en cuenta en estos casos
    Jaime Guerra
    Friday, October 22, 2010 2:09 PM