mejorar select

19/11/2003 - 09:19 por Susana | Informe spam
hola, vereis tengo un update metido en un trigger bastante cañero, pero
resumiendo tengo algo como esto:

update T_lineasDocumento
set Basei = Inserted.precio_unitario*inserted.unidades, -- PU*unidades
total = (Inserted.precio_unitario*inserted.unidades)
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei + Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

Claro, aquí para hacer referencia cada vez a la Basei tengo que escribir el
cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte que
algunos campos que se calculan no a partir de una simple suma o
multiplicación sino a partir de una función que me realiza una consulta
sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
despreciable), entonces claro, me gustaría evitar el tener que llamar a esta
función varias veces dentro de un mismo update.

Si ya se que puedo usar campos calculados, pero esos campos luego no
aparecen en las consultas, con lo cual tendría que en cada select donde
quiera llamarlos volver a calcularlos (una locura). Si se que estan las
vistas y q podría definirlos ahí no se

No se, a mi me gustaría más poder hacer algo como:

declare @bi money

update T_lineasDocumento
set @bi= Inserted.precio_unitario*inserted.unidades, Basei = @bi,
total = @bi
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei + Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

lo cual hace mucho mas entendible el código, no?

gracias

Preguntas similare

Leer las respuestas

#1 José Raúl Fenollar Martínez
19/11/2003 - 09:26 | Informe spam
declare @bi money

set @bi= Inserted.precio_unitario*inserted.unidades

update T_lineasDocumento
set Basei = @bi,
total = @bi +f_impuesto(@bi) -- Basei + Impuesto de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea




" Susana" escribió en el mensaje
news:%
hola, vereis tengo un update metido en un trigger bastante cañero, pero
resumiendo tengo algo como esto:

update T_lineasDocumento
set Basei = Inserted.precio_unitario*inserted.unidades, --


PU*unidades
total = (Inserted.precio_unitario*inserted.unidades)
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +


Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

Claro, aquí para hacer referencia cada vez a la Basei tengo que escribir


el
cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte que
algunos campos que se calculan no a partir de una simple suma o
multiplicación sino a partir de una función que me realiza una consulta
sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
despreciable), entonces claro, me gustaría evitar el tener que llamar a


esta
función varias veces dentro de un mismo update.

Si ya se que puedo usar campos calculados, pero esos campos luego no
aparecen en las consultas, con lo cual tendría que en cada select donde
quiera llamarlos volver a calcularlos (una locura). Si se que estan las
vistas y q podría definirlos ahí no se

No se, a mi me gustaría más poder hacer algo como:

declare @bi money

update T_lineasDocumento
set @bi= Inserted.precio_unitario*inserted.unidades, Basei = @bi,
total = @bi
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +


Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

lo cual hace mucho mas entendible el código, no?

gracias



Respuesta Responder a este mensaje
#2 Susana
19/11/2003 - 09:34 | Informe spam
Hola,

gracias, si, perdón, es que no me he explicado correctamente. El tema están
en que tengo q usar esto dentro de un trigger, y claro no puedo hacer el set
fuera del select pq cuando inserte o modifique más de una línea la variable
solamente tendrá el valor para una línea. Ese es el problema y que de
momento no se como solucionar.

gracias



"José Raúl Fenollar Martínez" escribió en el mensaje
news:
declare @bi money

set @bi= Inserted.precio_unitario*inserted.unidades

update T_lineasDocumento
set Basei = @bi,
total = @bi +f_impuesto(@bi) -- Basei + Impuesto de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea




" Susana" escribió en el mensaje
news:%
> hola, vereis tengo un update metido en un trigger bastante cañero, pero
> resumiendo tengo algo como esto:
>
> update T_lineasDocumento
> set Basei = Inserted.precio_unitario*inserted.unidades, --
PU*unidades
> total = (Inserted.precio_unitario*inserted.unidades)
> +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +
Impuesto
> de la Basei
> from T_lineasDocumento inner join inserted on
> inserted.id_linea=T_lineasDocumento .id_linea
>
> Claro, aquí para hacer referencia cada vez a la Basei tengo que escribir
el
> cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte que
> algunos campos que se calculan no a partir de una simple suma o
> multiplicación sino a partir de una función que me realiza una consulta
> sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
> despreciable), entonces claro, me gustaría evitar el tener que llamar a
esta
> función varias veces dentro de un mismo update.
>
> Si ya se que puedo usar campos calculados, pero esos campos luego no
> aparecen en las consultas, con lo cual tendría que en cada select donde
> quiera llamarlos volver a calcularlos (una locura). Si se que estan las
> vistas y q podría definirlos ahí no se
>
> No se, a mi me gustaría más poder hacer algo como:
>
> declare @bi money
>
> update T_lineasDocumento
> set @bi= Inserted.precio_unitario*inserted.unidades, Basei = @bi,
> total = @bi
> +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +
Impuesto
> de la Basei
> from T_lineasDocumento inner join inserted on
> inserted.id_linea=T_lineasDocumento .id_linea
>
> lo cual hace mucho mas entendible el código, no?
>
> gracias
>
>
>


Respuesta Responder a este mensaje
#3 Hilari
19/11/2003 - 10:20 | Informe spam
Deberas montarte un cursor y hacer un recorrido con ese cursor para
cada fila.


" Susana" escribió en el mensaje
news:%
Hola,

gracias, si, perdón, es que no me he explicado correctamente. El tema


están
en que tengo q usar esto dentro de un trigger, y claro no puedo hacer el


set
fuera del select pq cuando inserte o modifique más de una línea la


variable
solamente tendrá el valor para una línea. Ese es el problema y que de
momento no se como solucionar.

gracias



"José Raúl Fenollar Martínez" escribió en el mensaje
news:
> declare @bi money
>
> set @bi= Inserted.precio_unitario*inserted.unidades
>
> update T_lineasDocumento
> set Basei = @bi,
> total = @bi +f_impuesto(@bi) -- Basei + Impuesto de la


Basei
> from T_lineasDocumento inner join inserted on
> inserted.id_linea=T_lineasDocumento .id_linea
>
>
>
>
> " Susana" escribió en el mensaje
> news:%
> > hola, vereis tengo un update metido en un trigger bastante cañero,


pero
> > resumiendo tengo algo como esto:
> >
> > update T_lineasDocumento
> > set Basei = Inserted.precio_unitario*inserted.unidades, --
> PU*unidades
> > total = (Inserted.precio_unitario*inserted.unidades)
> > +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +
> Impuesto
> > de la Basei
> > from T_lineasDocumento inner join inserted on
> > inserted.id_linea=T_lineasDocumento .id_linea
> >
> > Claro, aquí para hacer referencia cada vez a la Basei tengo que


escribir
> el
> > cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte


que
> > algunos campos que se calculan no a partir de una simple suma o
> > multiplicación sino a partir de una función que me realiza una


consulta
> > sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
> > despreciable), entonces claro, me gustaría evitar el tener que llamar


a
> esta
> > función varias veces dentro de un mismo update.
> >
> > Si ya se que puedo usar campos calculados, pero esos campos luego no
> > aparecen en las consultas, con lo cual tendría que en cada select


donde
> > quiera llamarlos volver a calcularlos (una locura). Si se que estan


las
> > vistas y q podría definirlos ahí no se
> >
> > No se, a mi me gustaría más poder hacer algo como:
> >
> > declare @bi money
> >
> > update T_lineasDocumento
> > set @bi= Inserted.precio_unitario*inserted.unidades, Basei @bi,
> > total = @bi
> > +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +
> Impuesto
> > de la Basei
> > from T_lineasDocumento inner join inserted on
> > inserted.id_linea=T_lineasDocumento .id_linea
> >
> > lo cual hace mucho mas entendible el código, no?
> >
> > gracias
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#4 dbuendiab
19/11/2003 - 21:01 | Informe spam
" Susana" wrote in message news:<#...
hola, vereis tengo un update metido en un trigger bastante cañero, pero
resumiendo tengo algo como esto:

update T_lineasDocumento
set Basei = Inserted.precio_unitario*inserted.unidades, -- PU*unidades
total = (Inserted.precio_unitario*inserted.unidades)
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei + Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

Claro, aquí para hacer referencia cada vez a la Basei tengo que escribir el
cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte que
algunos campos que se calculan no a partir de una simple suma o
multiplicación sino a partir de una función que me realiza una consulta
sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
despreciable), entonces claro, me gustaría evitar el tener que llamar a esta
función varias veces dentro de un mismo update.

Si ya se que puedo usar campos calculados, pero esos campos luego no
aparecen en las consultas, con lo cual tendría que en cada select donde
quiera llamarlos volver a calcularlos (una locura). Si se que estan las
vistas y q podría definirlos ahí no se

No se, a mi me gustaría más poder hacer algo como:

declare @bi money

update T_lineasDocumento
set @bi= Inserted.precio_unitario*inserted.unidades, Basei = @bi,
total = @bi
+f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei + Impuesto
de la Basei
from T_lineasDocumento inner join inserted on
inserted.id_linea=T_lineasDocumento .id_linea

lo cual hace mucho mas entendible el código, no?

gracias



Podías usar dos updates, si no te abomina penalizar un poco el
rendimiento para ahorrarte de picar código... :-)

Update T_lineasDocumento
Set Basei = inserted.precio_unitario * inserted.unidades
From T_LineasDocumento
Inner Join inserted
On inserted.id_linea = T_lineasDocumento.id_linea

Update T_lineasDocumento
Set Total = Basei, OtroCampo = Basei * Basei, etc...

Diego Buendia
Barcelona, Spain
Respuesta Responder a este mensaje
#5 Tolo
20/11/2003 - 09:13 | Informe spam
Hola,

eso lo probé, pero me daba un error el trigger, pues me decía que el
registro había sido modificado

:(

"Diego Buendia" escribió en el mensaje
news:
" Susana" wrote in message


news:<#...
> hola, vereis tengo un update metido en un trigger bastante cañero, pero
> resumiendo tengo algo como esto:
>
> update T_lineasDocumento
> set Basei = Inserted.precio_unitario*inserted.unidades, --


PU*unidades
> total = (Inserted.precio_unitario*inserted.unidades)
> +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +


Impuesto
> de la Basei
> from T_lineasDocumento inner join inserted on
> inserted.id_linea=T_lineasDocumento .id_linea
>
> Claro, aquí para hacer referencia cada vez a la Basei tengo que escribir


el
> cálculo entero. Ufff, esto se llega a hacer incomprensible, a parte que
> algunos campos que se calculan no a partir de una simple suma o
> multiplicación sino a partir de una función que me realiza una consulta
> sobre toda la BD (tiempo de ejecución muy inferior al segundo, pero no
> despreciable), entonces claro, me gustaría evitar el tener que llamar a


esta
> función varias veces dentro de un mismo update.
>
> Si ya se que puedo usar campos calculados, pero esos campos luego no
> aparecen en las consultas, con lo cual tendría que en cada select donde
> quiera llamarlos volver a calcularlos (una locura). Si se que estan las
> vistas y q podría definirlos ahí no se
>
> No se, a mi me gustaría más poder hacer algo como:
>
> declare @bi money
>
> update T_lineasDocumento
> set @bi= Inserted.precio_unitario*inserted.unidades, Basei = @bi,
> total = @bi
> +f_impuesto(Inserted.precio_unitario*inserted.unidades) -- Basei +


Impuesto
> de la Basei
> from T_lineasDocumento inner join inserted on
> inserted.id_linea=T_lineasDocumento .id_linea
>
> lo cual hace mucho mas entendible el código, no?
>
> gracias

Podías usar dos updates, si no te abomina penalizar un poco el
rendimiento para ahorrarte de picar código... :-)

Update T_lineasDocumento
Set Basei = inserted.precio_unitario * inserted.unidades
From T_LineasDocumento
Inner Join inserted
On inserted.id_linea = T_lineasDocumento.id_linea

Update T_lineasDocumento
Set Total = Basei, OtroCampo = Basei * Basei, etc...

Diego Buendia
Barcelona, Spain
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida