case

08/06/2005 - 18:35 por Eduardo De Luca | Informe spam
Que tal . Les pido si alguno me puede ayudar .

El codigo que escribo abajo estaba dentro de un cursor , y tardaba bastante
(horas) lo elimine y este código se ejecuta en minutos . El único problema
que se me presento en donde marco con el numeral (###)

El equivalente en el cursor era





Update al_aut set v_cta_fec_vto = cta_fec_vto FROM e1_cuentas WHERE cta_id
=@variabledel cursor

..

..

despues de eliminarlo :





update al_aut set v_cta_fec_vto
case

when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then null

when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then

case

when dbo.e1_f_pasar_a_pesos(v_desvio_anterior, v_cta_mon)

20 then



### cta_fec_vto FROM e1_cuentas WHERE cta_id =
ctc_id



when dbo.e1_f_pasar_a_pesos(v_desvio_anterior, v_cta_mon)
<= 20 then

getdate()

end





end



como el asigno ese valor en el case

Gracias

Preguntas similare

Leer las respuestas

#6 Eduardo De Luca
08/06/2005 - 20:45 | Informe spam
Liliana, muchas Gracias , con la opcion 2 funciono perfecto , la uno no .
me diste una mano enorme porque me habia trabado en ese pedazo de codigo.
Saludos!!!
"Liliana Sorrentino" escribió en el mensaje
news:
Eduardo,
Además del comentario de Alejandro sobre los dos primeros WHEN, hay un
error
de sintaxis que puede modificarse de dos maneras:
1, combinando las dos tablas:

update al_aut set v_cta_fec_vto> case
when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
null
when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
case
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) > 20 then
e1_cuentas.cta_fec_vto
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) <= 20 then
getdate()
end
end
from e1_cuentas
where e1_cuentas .cta_id = alt_aut.ctc_id

2, con una subconsulta:
update al_aut set v_cta_fec_vto> case
when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
null
when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
case
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) > 20 then
(select e1_cuentas.cta_fec_vto from e1_cuentas
where e1_cuentas .cta_id = alt_aut.ctc_id)
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) <= 20 then
getdate()
end
end


"Eduardo De Luca" escribió en el mensaje
news:##
Alejandro , perdon va la correcion:

update al_aut set v_cta_fec_vto>> case
when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then


null
when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
case
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) > 20 then
e1_cuentas.cta_fec_vto FROM e1_cuentas WHERE
e1_cuentas .cta_id = alt_aut.ctc_id

when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
v_cta_mon) <= 20 then
getdate()
end


end

fijate que si bien es la misma comparacion , la funcion recibe distintos
parametros
GRacias



"Alejandro Mesa" escribió en el
mensaje news:
> Eduardo,
>
> Pudieras reescribir la sentencia, parece que existe conflicto en el


case.
>
>> update al_aut set v_cta_fec_vto>> >>
>> case
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> then
>> null
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>
> La misma comparacion en diferentes "when".
>
> Otra cosa mas, pudieras poner el nombre de la tabla que corresponde a


cada
> columna?
>
>> ### cta_fec_vto FROM e1_cuentas WHERE cta_id = ctc_id
>
> sera que cta_id y ctc_id pertenecen a la misma tabla?
>
>
> AMB
> "Eduardo De Luca" wrote:
>
>> Que tal . Les pido si alguno me puede ayudar .
>>
>> El codigo que escribo abajo estaba dentro de un cursor , y tardaba
>> bastante
>> (horas) lo elimine y este código se ejecuta en minutos . El único
>> problema
>> que se me presento en donde marco con el numeral (###)
>>
>> El equivalente en el cursor era
>>
>>
>>
>> .
>>
>> Update al_aut set v_cta_fec_vto = cta_fec_vto FROM e1_cuentas WHERE
>> cta_id
>> =@variabledel cursor
>>
>> ..
>>
>> ...
>>
>> despues de eliminarlo :
>>
>>
>>
>>
>>
>> update al_aut set v_cta_fec_vto>> >>
>> case
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> then
>> null
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>>
>> case
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon)
>> > 20 then
>>
>> ### cta_fec_vto FROM e1_cuentas WHERE cta_id >> >> ctc_id
>>
>>
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon)
>> <= 20 then
>>
>> getdate()
>>
>> end
>>
>>
>>
>>
>>
>> end
>>
>>
>>
>> como el asigno ese valor en el case
>>
>> Gracias
>>
>>
>>






Respuesta Responder a este mensaje
#7 Alejandro Mesa
08/06/2005 - 21:34 | Informe spam
Eduardo,

Que bueno que se pudo resolver el problema, gracias a Liliana.

Una recomendación, y esta es que si la funcion dbo.e1_f_pasar_a_pesos() no
devuelve valor NULL (siempre devuelve un valor que puede ser cero o diferente
a cero), entonces puedes usar "else" en las expresiones case y asi no se
llama a la funcion nuevamente. Algo asi como:

update
al_aut
set
v_cta_fec_vto =
case
when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) <= 20 then null
else
case
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior, v_cta_mon) > 20 then
(select e1_cuentas.cta_fec_vto FROM e1_cuentas WHERE
e1_cuentas.cta_id = al_aut.ctc_id)
else getdate()
end
end
go


Saludos,

AMB

"Eduardo De Luca" wrote:

Liliana, muchas Gracias , con la opcion 2 funciono perfecto , la uno no .
me diste una mano enorme porque me habia trabado en ese pedazo de codigo.
Saludos!!!
"Liliana Sorrentino" escribió en el mensaje
news:
> Eduardo,
> Además del comentario de Alejandro sobre los dos primeros WHEN, hay un
> error
> de sintaxis que puede modificarse de dos maneras:
> 1, combinando las dos tablas:
>
> update al_aut set v_cta_fec_vto> > case
> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
> null
> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
> case
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) > 20 then
> e1_cuentas.cta_fec_vto
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) <= 20 then
> getdate()
> end
> end
> from e1_cuentas
> where e1_cuentas .cta_id = alt_aut.ctc_id
>
> 2, con una subconsulta:
> update al_aut set v_cta_fec_vto> > case
> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
> null
> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
> case
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) > 20 then
> (select e1_cuentas.cta_fec_vto from e1_cuentas
> where e1_cuentas .cta_id = alt_aut.ctc_id)
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) <= 20 then
> getdate()
> end
> end
>
>
> "Eduardo De Luca" escribió en el mensaje
> news:##
>> Alejandro , perdon va la correcion:
>>
>> update al_aut set v_cta_fec_vto> >> case
>> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
> null
>> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> case
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon) > 20 then
>> e1_cuentas.cta_fec_vto FROM e1_cuentas WHERE
>> e1_cuentas .cta_id = alt_aut.ctc_id
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon) <= 20 then
>> getdate()
>> end
>>
>>
>> end
>>
>> fijate que si bien es la misma comparacion , la funcion recibe distintos
>> parametros
>> GRacias
>>
>>
>>
>> "Alejandro Mesa" escribió en el
>> mensaje news:
>> > Eduardo,
>> >
>> > Pudieras reescribir la sentencia, parece que existe conflicto en el
> case.
>> >
>> >> update al_aut set v_cta_fec_vto> >> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> then
>> >> null
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> >
>> > La misma comparacion en diferentes "when".
>> >
>> > Otra cosa mas, pudieras poner el nombre de la tabla que corresponde a
> cada
>> > columna?
>> >
>> >> ### cta_fec_vto FROM e1_cuentas WHERE cta_id = ctc_id
>> >
>> > sera que cta_id y ctc_id pertenecen a la misma tabla?
>> >
>> >
>> > AMB
>> > "Eduardo De Luca" wrote:
>> >
>> >> Que tal . Les pido si alguno me puede ayudar .
>> >>
>> >> El codigo que escribo abajo estaba dentro de un cursor , y tardaba
>> >> bastante
>> >> (horas) lo elimine y este código se ejecuta en minutos . El único
>> >> problema
>> >> que se me presento en donde marco con el numeral (###)
>> >>
>> >> El equivalente en el cursor era
>> >>
>> >>
>> >>
>> >> .
>> >>
>> >> Update al_aut set v_cta_fec_vto = cta_fec_vto FROM e1_cuentas WHERE
>> >> cta_id
>> >> =@variabledel cursor
>> >>
>> >> ..
>> >>
>> >> ...
>> >>
>> >> despues de eliminarlo :
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> update al_aut set v_cta_fec_vto> >> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> then
>> >> null
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon)
>> >> > 20 then
>> >>
>> >> ### cta_fec_vto FROM e1_cuentas WHERE cta_id > >> >> ctc_id
>> >>
>> >>
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon)
>> >> <= 20 then
>> >>
>> >> getdate()
>> >>
>> >> end
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> end
>> >>
>> >>
>> >>
>> >> como el asigno ese valor en el case
>> >>
>> >> Gracias
>> >>
>> >>
>> >>
>>
>>
>
>



Respuesta Responder a este mensaje
#8 Eduardo De Luca
09/06/2005 - 15:59 | Informe spam
Alejandro , como siempre gracias por tu recomendaciones. No se si recordas,
pero siempre mis consultas van apuntadas a que estoy eliminando cursores de
los sp.

Como es que procesos que tardaban horas , pasan a tardar minutos eliminando
los cursores? , si bien se que SQL Server esta orientado a conjuntos de
datos y no a tratarlos individualmente, por ej., cuando recorre la tabla
para hacer un update ,como trabaja el motor ?, no genera un cursor
implícitamente para evaluar los registros.Si no es asi como recorre el lote
de registros.



El proceso que reescribí mas abajo (con el agregado de otras sentencias) ,
con cursores tardaba casi 3 horas , ahora paso a tardar menos de 2 minutos .
Si bien estoy mas que contento , sigo si entender la solución de fondo de
cómo trabaja el motor.

Acudo a tus conocimientos para que me puedas desasnar de este "misterio "
para mi ignorancia.



Para que te des una idea estoy trabajando con una base de 100 GB , donde el
promedio de las tablas son 80 millones de registros para arriba.



Saludos!
"Alejandro Mesa" escribió en el
mensaje news:
Eduardo,

Que bueno que se pudo resolver el problema, gracias a Liliana.

Una recomendación, y esta es que si la funcion dbo.e1_f_pasar_a_pesos() no
devuelve valor NULL (siempre devuelve un valor que puede ser cero o
diferente
a cero), entonces puedes usar "else" en las expresiones case y asi no se
llama a la funcion nuevamente. Algo asi como:

update
al_aut
set
v_cta_fec_vto > case
when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) <= 20 then null
else
case
when dbo.e1_f_pasar_a_pesos(v_desvio_anterior, v_cta_mon) > 20 then
(select e1_cuentas.cta_fec_vto FROM e1_cuentas WHERE
e1_cuentas.cta_id = al_aut.ctc_id)
else getdate()
end
end
go


Saludos,

AMB

"Eduardo De Luca" wrote:

Liliana, muchas Gracias , con la opcion 2 funciono perfecto , la uno no .
me diste una mano enorme porque me habia trabado en ese pedazo de codigo.
Saludos!!!
"Liliana Sorrentino" escribió en el
mensaje
news:
> Eduardo,
> Además del comentario de Alejandro sobre los dos primeros WHEN, hay un
> error
> de sintaxis que puede modificarse de dos maneras:
> 1, combinando las dos tablas:
>
> update al_aut set v_cta_fec_vto>> > case
> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
> null
> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
> case
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) > 20 then
> e1_cuentas.cta_fec_vto
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) <= 20 then
> getdate()
> end
> end
> from e1_cuentas
> where e1_cuentas .cta_id = alt_aut.ctc_id
>
> 2, con una subconsulta:
> update al_aut set v_cta_fec_vto>> > case
> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
> null
> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
> case
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) > 20 then
> (select e1_cuentas.cta_fec_vto from
> e1_cuentas
> where e1_cuentas .cta_id = alt_aut.ctc_id)
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
> v_cta_mon) <= 20 then
> getdate()
> end
> end
>
>
> "Eduardo De Luca" escribió en el mensaje
> news:##
>> Alejandro , perdon va la correcion:
>>
>> update al_aut set v_cta_fec_vto>> >> case
>> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> then
> null
>> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> case
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon) > 20 then
>> e1_cuentas.cta_fec_vto FROM e1_cuentas
>> WHERE
>> e1_cuentas .cta_id = alt_aut.ctc_id
>>
>> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> v_cta_mon) <= 20 then
>> getdate()
>> end
>>
>>
>> end
>>
>> fijate que si bien es la misma comparacion , la funcion recibe
>> distintos
>> parametros
>> GRacias
>>
>>
>>
>> "Alejandro Mesa" escribió en
>> el
>> mensaje news:
>> > Eduardo,
>> >
>> > Pudieras reescribir la sentencia, parece que existe conflicto en el
> case.
>> >
>> >> update al_aut set v_cta_fec_vto>> >> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> then
>> >> null
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20
>> >> then
>> >
>> > La misma comparacion en diferentes "when".
>> >
>> > Otra cosa mas, pudieras poner el nombre de la tabla que corresponde
>> > a
> cada
>> > columna?
>> >
>> >> ### cta_fec_vto FROM e1_cuentas WHERE cta_id = ctc_id
>> >
>> > sera que cta_id y ctc_id pertenecen a la misma tabla?
>> >
>> >
>> > AMB
>> > "Eduardo De Luca" wrote:
>> >
>> >> Que tal . Les pido si alguno me puede ayudar .
>> >>
>> >> El codigo que escribo abajo estaba dentro de un cursor , y tardaba
>> >> bastante
>> >> (horas) lo elimine y este código se ejecuta en minutos . El único
>> >> problema
>> >> que se me presento en donde marco con el numeral (###)
>> >>
>> >> El equivalente en el cursor era
>> >>
>> >>
>> >>
>> >> .
>> >>
>> >> Update al_aut set v_cta_fec_vto = cta_fec_vto FROM e1_cuentas
>> >> WHERE
>> >> cta_id
>> >> =@variabledel cursor
>> >>
>> >> ..
>> >>
>> >> ...
>> >>
>> >> despues de eliminarlo :
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> update al_aut set v_cta_fec_vto>> >> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> then
>> >> null
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20
>> >> then
>> >>
>> >> case
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon)
>> >> > 20 then
>> >>
>> >> ### cta_fec_vto FROM e1_cuentas WHERE
>> >> cta_id >> >> >> ctc_id
>> >>
>> >>
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon)
>> >> <= 20 then
>> >>
>> >> getdate()
>> >>
>> >> end
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> end
>> >>
>> >>
>> >>
>> >> como el asigno ese valor en el case
>> >>
>> >> Gracias
>> >>
>> >>
>> >>
>>
>>
>
>



Respuesta Responder a este mensaje
#9 Alejandro Mesa
09/06/2005 - 19:09 | Informe spam
Eduardo,

Empezemos por decir que hay diferentes tipos de cursores (puedes leer al
respecto en los libros en linea, si buscas "Cursor Types") y cada tipo conume
mas o menos recursos, pero todos consumen y eso es lo que mas afecta el
preformance de sql server. Fijate que ellos hacen uso de tempdb, y
dependiendo del tipo, hace un chequeo de la o las tablas involucradas para
dejar ver o no los cambios que ocurren sobre la data pero fuera del cursor
(caso de Keyset-driven y Dynamic). Los cursores estaticos / insensitive hacen
una copia completa del resultado en tempdb, siendo este el que hace un uso
mas fuerte de esta bd, los keyset hacen una copia de las llaves del
resultado. Si el cursor se declara como SCROLL_LOCKS estonces sql server hace
un share lock para garantizar que no haya cambios durante el scroll.
Dependiendo del si son locales o globales, entonces el cursor es visible
dentro del proceso o puede ser visto por otros procesos dentro de la misma
coneccion. Tambien es importante el numero de filas resultantes de la
sentencia select usada por el cursor puesto que si se tiene que crear una
tabla en tempdb esta puede ser pequenia o bien grande y muchas y cuando esto
ultimo ocurre, sql server hace un lock de tempdb.

Todo esto esta latente mientras no se cierre el cursor y se haga un
deallocate.

Si ha esto le sumamos que el proceso puede ser corrido por multiples
usuarios, ya sabes, peor sera el rendimineto del server.


AMB

"Eduardo De Luca" wrote:

Alejandro , como siempre gracias por tu recomendaciones. No se si recordas,
pero siempre mis consultas van apuntadas a que estoy eliminando cursores de
los sp.

Como es que procesos que tardaban horas , pasan a tardar minutos eliminando
los cursores? , si bien se que SQL Server esta orientado a conjuntos de
datos y no a tratarlos individualmente, por ej., cuando recorre la tabla
para hacer un update ,como trabaja el motor ?, no genera un cursor
implícitamente para evaluar los registros.Si no es asi como recorre el lote
de registros.



El proceso que reescribí mas abajo (con el agregado de otras sentencias) ,
con cursores tardaba casi 3 horas , ahora paso a tardar menos de 2 minutos .
Si bien estoy mas que contento , sigo si entender la solución de fondo de
cómo trabaja el motor.

Acudo a tus conocimientos para que me puedas desasnar de este "misterio "
para mi ignorancia.



Para que te des una idea estoy trabajando con una base de 100 GB , donde el
promedio de las tablas son 80 millones de registros para arriba.



Saludos!
"Alejandro Mesa" escribió en el
mensaje news:
> Eduardo,
>
> Que bueno que se pudo resolver el problema, gracias a Liliana.
>
> Una recomendación, y esta es que si la funcion dbo.e1_f_pasar_a_pesos() no
> devuelve valor NULL (siempre devuelve un valor que puede ser cero o
> diferente
> a cero), entonces puedes usar "else" en las expresiones case y asi no se
> llama a la funcion nuevamente. Algo asi como:
>
> update
> al_aut
> set
> v_cta_fec_vto > > case
> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) <= 20 then null
> else
> case
> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior, v_cta_mon) > 20 then
> (select e1_cuentas.cta_fec_vto FROM e1_cuentas WHERE
> e1_cuentas.cta_id = al_aut.ctc_id)
> else getdate()
> end
> end
> go
>
>
> Saludos,
>
> AMB
>
> "Eduardo De Luca" wrote:
>
>> Liliana, muchas Gracias , con la opcion 2 funciono perfecto , la uno no .
>> me diste una mano enorme porque me habia trabado en ese pedazo de codigo.
>> Saludos!!!
>> "Liliana Sorrentino" escribió en el
>> mensaje
>> news:
>> > Eduardo,
>> > Además del comentario de Alejandro sobre los dos primeros WHEN, hay un
>> > error
>> > de sintaxis que puede modificarse de dos maneras:
>> > 1, combinando las dos tablas:
>> >
>> > update al_aut set v_cta_fec_vto> >> > case
>> > when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
>> > null
>> > when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> > case
>> > when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> > v_cta_mon) > 20 then
>> > e1_cuentas.cta_fec_vto
>> > when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> > v_cta_mon) <= 20 then
>> > getdate()
>> > end
>> > end
>> > from e1_cuentas
>> > where e1_cuentas .cta_id = alt_aut.ctc_id
>> >
>> > 2, con una subconsulta:
>> > update al_aut set v_cta_fec_vto> >> > case
>> > when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20 then
>> > null
>> > when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> > case
>> > when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> > v_cta_mon) > 20 then
>> > (select e1_cuentas.cta_fec_vto from
>> > e1_cuentas
>> > where e1_cuentas .cta_id = alt_aut.ctc_id)
>> > when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> > v_cta_mon) <= 20 then
>> > getdate()
>> > end
>> > end
>> >
>> >
>> > "Eduardo De Luca" escribió en el mensaje
>> > news:##
>> >> Alejandro , perdon va la correcion:
>> >>
>> >> update al_aut set v_cta_fec_vto> >> >> case
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> then
>> > null
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20 then
>> >> case
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon) > 20 then
>> >> e1_cuentas.cta_fec_vto FROM e1_cuentas
>> >> WHERE
>> >> e1_cuentas .cta_id = alt_aut.ctc_id
>> >>
>> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> v_cta_mon) <= 20 then
>> >> getdate()
>> >> end
>> >>
>> >>
>> >> end
>> >>
>> >> fijate que si bien es la misma comparacion , la funcion recibe
>> >> distintos
>> >> parametros
>> >> GRacias
>> >>
>> >>
>> >>
>> >> "Alejandro Mesa" escribió en
>> >> el
>> >> mensaje news:
>> >> > Eduardo,
>> >> >
>> >> > Pudieras reescribir la sentencia, parece que existe conflicto en el
>> > case.
>> >> >
>> >> >> update al_aut set v_cta_fec_vto> >> >> >>
>> >> >> case
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> >> then
>> >> >> null
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20
>> >> >> then
>> >> >
>> >> > La misma comparacion en diferentes "when".
>> >> >
>> >> > Otra cosa mas, pudieras poner el nombre de la tabla que corresponde
>> >> > a
>> > cada
>> >> > columna?
>> >> >
>> >> >> ### cta_fec_vto FROM e1_cuentas WHERE cta_id = ctc_id
>> >> >
>> >> > sera que cta_id y ctc_id pertenecen a la misma tabla?
>> >> >
>> >> >
>> >> > AMB
>> >> > "Eduardo De Luca" wrote:
>> >> >
>> >> >> Que tal . Les pido si alguno me puede ayudar .
>> >> >>
>> >> >> El codigo que escribo abajo estaba dentro de un cursor , y tardaba
>> >> >> bastante
>> >> >> (horas) lo elimine y este código se ejecuta en minutos . El único
>> >> >> problema
>> >> >> que se me presento en donde marco con el numeral (###)
>> >> >>
>> >> >> El equivalente en el cursor era
>> >> >>
>> >> >>
>> >> >>
>> >> >> .
>> >> >>
>> >> >> Update al_aut set v_cta_fec_vto = cta_fec_vto FROM e1_cuentas
>> >> >> WHERE
>> >> >> cta_id
>> >> >> =@variabledel cursor
>> >> >>
>> >> >> ..
>> >> >>
>> >> >> ...
>> >> >>
>> >> >> despues de eliminarlo :
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> update al_aut set v_cta_fec_vto> >> >> >>
>> >> >> case
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio, v_cta_mon) > 20
>> >> >> then
>> >> >> null
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio,v_cta_mon) > 20
>> >> >> then
>> >> >>
>> >> >> case
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> >> v_cta_mon)
>> >> >> > 20 then
>> >> >>
>> >> >> ### cta_fec_vto FROM e1_cuentas WHERE
>> >> >> cta_id > >> >> >> ctc_id
>> >> >>
>> >> >>
>> >> >>
>> >> >> when dbo.e1_f_pasar_a_pesos(v_desvio_anterior,
>> >> >> v_cta_mon)
>> >> >> <= 20 then
>> >> >>
>> >> >> getdate()
>> >> >>
>> >> >> end
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> end
>> >> >>
>> >> >>
>> >> >>
>> >> >> como el asigno ese valor en el case
>> >> >>
>> >> >> Gracias
>> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>> >
>> >
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida