Cita: Esta consulta anda lo mas bien espeto la parte del if, lo que deseo hacer es que si “@Prim = TRUE” pase el valor de @TEM a el alias Pla_Des1 y además necesito que ase valor “@Prim= false” es decir realizar varias operaciones como se puede hacer en los lenguajes de programación.
Primer error:
EL SQL no es un lenguaje de programación. Si alguien te dijo eso, te mintió.
El SQL es un
lenguaje de consultas, y lo que tiene son algunas extensiones (que varían en cada DBMS que permiten hacer cosas que no estaban comprendidas en el estandar ANSI-SQL, simplemente para facilitar la vida de los DBA.
Respecto al código, tu problema es de simple resolución:
No puedes poner dos operaciones simultáneas o consecutivas como consecuencia del mismo resultado TRUE o FALSE de un IF().
Eso no te lo permite SQL y
tampoco te lo permite ningún lenguaje de programación, porque estás confundiendo
IF() con
IF... THEN...ELSE... IF() es una
función, no un
controlador de flujo, por eso mismo no acepta múltiples sentencias en cada salida.
Su equivalente, por ejemplo en .Net es
IIF(value, True, False), que tampoco te acepta múltiples operaciones en el resultado de
value.
Para usar
IF... THEN...ELSE... como controlador de flujo debes hacerlo en un script o en un
Stored Procedure, y no en una consulta.
Para resolver el problema de las dos operaciones, la sintaxis (simplificada) debería ser:
Código MySQL:
Ver original BolP_Num,
Cli_Nom,
BolP_CanA,
Esp_Nom,
BolP_PreU,
B.*,
E.Esp_Nom,
C.Cli_Nom,
Pla_Dia,
Pla_Des,
Pla_Tip
especies E
ON B.Esp_Num
= E.Esp_Num
) as LineaBol
Ahora bien, esas dos operaciones tienen un problema: La segunda es irrelevante porque jamás, en ningún momento la variable
@Prim cambia su valor, por lo que no se necesita.
Código MySQL:
Ver original BolP_Num,
Cli_Nom,
BolP_CanA,
Esp_Nom,
BolP_PreU,
B.*,
E.Esp_Nom,
C.Cli_Nom,
Pla_Dia,
Pla_Des,
Pla_Tip
especies E
ON B.Esp_Num
= E.Esp_Num
) as LineaBol
Además, el uso mismo de las variables no se comprende, poerque lo mismo daría resultado poniendo así:
Código MySQL:
Ver original BolP_Num,
Cli_Nom,
BolP_CanA,
Esp_Nom,
BolP_PreU,
IF(@Prim
, Pla_Des
, NULL) Pla_Des
B.*,
E.Esp_Nom,
C.Cli_Nom,
Pla_Dia,
Pla_Des,
Pla_Tip
especies E
ON B.Esp_Num
= E.Esp_Num
) as LineaBol
Especialmente teniendo en cuenta que esa variable
@TEM va cambiando su valor en cada registro leído, por lo que al final de la ejecución sólo conservará el último obtenido...
El conjunto entero de la consulta no me resulta comprensible, no comprendo cuál es la necesidad de esas variable.
¿Podrías explicar un poco mejor la idea de lo que quieres obtener?