Crear tabla temporal en trigger

04/06/2005 - 14:56 por Alonso | Informe spam
Necesito crear en un trigger una tabla temporal que me resuma los registros
de INSERTEd sobre un campo pues la voy a utilizar en distintas instrucciones
consecutivas.

Se puede hacer y como ?

Preguntas similare

Leer las respuestas

#1 Maxi
04/06/2005 - 18:21 | Informe spam
Hola, mmm no creo que sea muy recomendado hacer eso en un trigger, cual es
el problema real que debes resolver? porque lo que nos has indicado es una
solucion a un X problema, yo te podria decir como hacerlo pero no es una
buena practica hacer esto en los triggers, con lo cual me gustaria saber
realmente que necesitas resolver y podremos empezar a elaborar la solucion
que mas se pueda adecuar, me resisto a pensar que necesites si o si un
trigger con una tabla temportal :s


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alonso" escribió en el mensaje
news:
Necesito crear en un trigger una tabla temporal que me resuma los
registros
de INSERTEd sobre un campo pues la voy a utilizar en distintas
instrucciones
consecutivas.

Se puede hacer y como ?



Respuesta Responder a este mensaje
#2 Alonso
05/06/2005 - 01:06 | Informe spam
Bueno es que es muy largo el tema para explicarlo aqui. Pero voy a resumirlo
con un ejemplo parecido mas sencillo:

Tengo una tabla PROYECTO con campos como estos: (codigo, balancetipo1,
balancetipo2, balancetipo3, y otros campos)

(en el caso real son 5 tipos distintos cuyo acumulado debe llevarse por
separado porque son datos que deben estar disponibles muy rapidamente para
control de pagos y no quiero estar recalculandolos cada vez).

Y otra tabla TRANSACCIONPROYECTO (codigo, secuencia, tipo, valor, ...)

Debo mantener en los campos BalanceTipoN de PROYECTO el valor acumulado de
la otra tabla. El problema es segun sea el tipo en TRANSACCIONPROYECTO debo
actualizar uno u otro campo de la tabla PROYECTO.
Ejemplo del trigger de insert para transaccionproyecto seria algo asi:

Update Proyecto Set proyecto.balancetipo1=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=1

Update Proyecto Set proyecto.balancetipo2=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=2

Update Proyecto Set proyecto.balancetipo3=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=3

El problema es que tengo que manejarlo tambien para UPDATE y DELETE lo cual
hace sumamente repetitivo el subselect (select codigo, sum(valor) from
inserted group by codigo). Lo que quisiera es poder tener ese subselect en
una tablita temporal pues me imagino que puede ser mas rapido asi. no ?

De ahi es mi duda. ... Ahora bien si hay una mejor manera de hacerlo pues
favor decirme...

Muchisimas gracias












"Maxi" wrote in message
news:
Hola, mmm no creo que sea muy recomendado hacer eso en un trigger, cual es
el problema real que debes resolver? porque lo que nos has indicado es una
solucion a un X problema, yo te podria decir como hacerlo pero no es una
buena practica hacer esto en los triggers, con lo cual me gustaria saber
realmente que necesitas resolver y podremos empezar a elaborar la solucion
que mas se pueda adecuar, me resisto a pensar que necesites si o si un
trigger con una tabla temportal :s


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alonso" escribió en el mensaje
news:
> Necesito crear en un trigger una tabla temporal que me resuma los
> registros
> de INSERTEd sobre un campo pues la voy a utilizar en distintas
> instrucciones
> consecutivas.
>
> Se puede hacer y como ?
>
>
>


Respuesta Responder a este mensaje
#3 Alonso
05/06/2005 - 01:19 | Informe spam
Perdon, el select anidado lleva el tipo, ej. asi:

(select codigo, tipo, sum(valor) from inserted group by
codigo,tipo)

"Alonso" wrote in message
news:
Bueno es que es muy largo el tema para explicarlo aqui. Pero voy a


resumirlo
con un ejemplo parecido mas sencillo:

Tengo una tabla PROYECTO con campos como estos: (codigo, balancetipo1,
balancetipo2, balancetipo3, y otros campos)

(en el caso real son 5 tipos distintos cuyo acumulado debe llevarse por
separado porque son datos que deben estar disponibles muy rapidamente para
control de pagos y no quiero estar recalculandolos cada vez).

Y otra tabla TRANSACCIONPROYECTO (codigo, secuencia, tipo, valor, ...)

Debo mantener en los campos BalanceTipoN de PROYECTO el valor acumulado de
la otra tabla. El problema es segun sea el tipo en TRANSACCIONPROYECTO


debo
actualizar uno u otro campo de la tabla PROYECTO.
Ejemplo del trigger de insert para transaccionproyecto seria algo asi:

Update Proyecto Set proyecto.balancetipo1=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=1

Update Proyecto Set proyecto.balancetipo2=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=2

Update Proyecto Set proyecto.balancetipo3=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=3

El problema es que tengo que manejarlo tambien para UPDATE y DELETE lo


cual
hace sumamente repetitivo el subselect (select codigo, sum(valor) from
inserted group by codigo). Lo que quisiera es poder tener ese subselect


en
una tablita temporal pues me imagino que puede ser mas rapido asi. no ?

De ahi es mi duda. ... Ahora bien si hay una mejor manera de hacerlo pues
favor decirme...

Muchisimas gracias












"Maxi" wrote in message
news:
> Hola, mmm no creo que sea muy recomendado hacer eso en un trigger, cual


es
> el problema real que debes resolver? porque lo que nos has indicado es


una
> solucion a un X problema, yo te podria decir como hacerlo pero no es una
> buena practica hacer esto en los triggers, con lo cual me gustaria saber
> realmente que necesitas resolver y podremos empezar a elaborar la


solucion
> que mas se pueda adecuar, me resisto a pensar que necesites si o si un
> trigger con una tabla temportal :s
>
>
> Maxi - Buenos Aires - Argentina
> Desarrollador 3 Estrellas
>
> Msn_messager:
> mail: Maxi.da[arroba]gmail.com
>
> "Alonso" escribió en el mensaje
> news:
> > Necesito crear en un trigger una tabla temporal que me resuma los
> > registros
> > de INSERTEd sobre un campo pues la voy a utilizar en distintas
> > instrucciones
> > consecutivas.
> >
> > Se puede hacer y como ?
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Maxi
05/06/2005 - 01:44 | Informe spam
Hola, si son estas 3 condiciones lo ideal es hacerlo como lo estas haciendo
vos, las tablas temporales generan una carga adicional.
Otra alternativa seria en lugar de hacer triggers usar vistas indexadas para
cada tipo entonces te OLVIDAS de mantener estos valores. A mi la solucion de
vistas indexadas me gusta mucho mas que usar trigger, estudialo, pero de
algo que no haria es meter dentro de un trigger una tabla temporal, por lo
menos trataria de evitar esto lo maximo posible


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alonso" escribió en el mensaje
news:
Bueno es que es muy largo el tema para explicarlo aqui. Pero voy a
resumirlo
con un ejemplo parecido mas sencillo:

Tengo una tabla PROYECTO con campos como estos: (codigo, balancetipo1,
balancetipo2, balancetipo3, y otros campos)

(en el caso real son 5 tipos distintos cuyo acumulado debe llevarse por
separado porque son datos que deben estar disponibles muy rapidamente para
control de pagos y no quiero estar recalculandolos cada vez).

Y otra tabla TRANSACCIONPROYECTO (codigo, secuencia, tipo, valor, ...)

Debo mantener en los campos BalanceTipoN de PROYECTO el valor acumulado de
la otra tabla. El problema es segun sea el tipo en TRANSACCIONPROYECTO
debo
actualizar uno u otro campo de la tabla PROYECTO.
Ejemplo del trigger de insert para transaccionproyecto seria algo asi:

Update Proyecto Set proyecto.balancetipo1=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=1

Update Proyecto Set proyecto.balancetipo2=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=2

Update Proyecto Set proyecto.balancetipo3=proyecto.balancetipo1+I.valor
from proyecto inner join (select codigo, sum(valor) from inserted group by
codigo) I on I.codigo=proyecto.codigo and I.tipo=3

El problema es que tengo que manejarlo tambien para UPDATE y DELETE lo
cual
hace sumamente repetitivo el subselect (select codigo, sum(valor) from
inserted group by codigo). Lo que quisiera es poder tener ese subselect
en
una tablita temporal pues me imagino que puede ser mas rapido asi. no ?

De ahi es mi duda. ... Ahora bien si hay una mejor manera de hacerlo pues
favor decirme...

Muchisimas gracias












"Maxi" wrote in message
news:
Hola, mmm no creo que sea muy recomendado hacer eso en un trigger, cual
es
el problema real que debes resolver? porque lo que nos has indicado es
una
solucion a un X problema, yo te podria decir como hacerlo pero no es una
buena practica hacer esto en los triggers, con lo cual me gustaria saber
realmente que necesitas resolver y podremos empezar a elaborar la
solucion
que mas se pueda adecuar, me resisto a pensar que necesites si o si un
trigger con una tabla temportal :s


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alonso" escribió en el mensaje
news:
> Necesito crear en un trigger una tabla temporal que me resuma los
> registros
> de INSERTEd sobre un campo pues la voy a utilizar en distintas
> instrucciones
> consecutivas.
>
> Se puede hacer y como ?
>
>
>






Respuesta Responder a este mensaje
#5 Alonso
05/06/2005 - 02:22 | Informe spam
Fijate... te agradezco mucho el consejo pero yo lo que buscaba era que me
dijeran como crear la tabla temporal en el trigger, ya yo haria las pruebas
de lugar sobre la sobrecarga o no. De hecho ya investigue como hacerlo con
una variable tipo tabla y hasta ahora las pruebas van bien. Es mas rapido
que repetir el subselect en cada update. Quiza no sobrecarga mucho porque
la tabla temporal tiene muy pocos campos.
Pero , de todas formas lo probare con vistas indexadas.
gracias


"Maxi" wrote in message
news:
Hola, si son estas 3 condiciones lo ideal es hacerlo como lo estas


haciendo
vos, las tablas temporales generan una carga adicional.
Otra alternativa seria en lugar de hacer triggers usar vistas indexadas


para
cada tipo entonces te OLVIDAS de mantener estos valores. A mi la solucion


de
vistas indexadas me gusta mucho mas que usar trigger, estudialo, pero de
algo que no haria es meter dentro de un trigger una tabla temporal, por lo
menos trataria de evitar esto lo maximo posible


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alonso" escribió en el mensaje
news:
> Bueno es que es muy largo el tema para explicarlo aqui. Pero voy a
> resumirlo
> con un ejemplo parecido mas sencillo:
>
> Tengo una tabla PROYECTO con campos como estos: (codigo, balancetipo1,
> balancetipo2, balancetipo3, y otros campos)
>
> (en el caso real son 5 tipos distintos cuyo acumulado debe llevarse por
> separado porque son datos que deben estar disponibles muy rapidamente


para
> control de pagos y no quiero estar recalculandolos cada vez).
>
> Y otra tabla TRANSACCIONPROYECTO (codigo, secuencia, tipo, valor, ...)
>
> Debo mantener en los campos BalanceTipoN de PROYECTO el valor acumulado


de
> la otra tabla. El problema es segun sea el tipo en TRANSACCIONPROYECTO
> debo
> actualizar uno u otro campo de la tabla PROYECTO.
> Ejemplo del trigger de insert para transaccionproyecto seria algo asi:
>
> Update Proyecto Set proyecto.balancetipo1=proyecto.balancetipo1+I.valor
> from proyecto inner join (select codigo, sum(valor) from inserted group


by
> codigo) I on I.codigo=proyecto.codigo and I.tipo=1
>
> Update Proyecto Set proyecto.balancetipo2=proyecto.balancetipo1+I.valor
> from proyecto inner join (select codigo, sum(valor) from inserted group


by
> codigo) I on I.codigo=proyecto.codigo and I.tipo=2
>
> Update Proyecto Set proyecto.balancetipo3=proyecto.balancetipo1+I.valor
> from proyecto inner join (select codigo, sum(valor) from inserted group


by
> codigo) I on I.codigo=proyecto.codigo and I.tipo=3
>
> El problema es que tengo que manejarlo tambien para UPDATE y DELETE lo
> cual
> hace sumamente repetitivo el subselect (select codigo, sum(valor) from
> inserted group by codigo). Lo que quisiera es poder tener ese


subselect
> en
> una tablita temporal pues me imagino que puede ser mas rapido asi. no ?
>
> De ahi es mi duda. ... Ahora bien si hay una mejor manera de hacerlo


pues
> favor decirme...
>
> Muchisimas gracias
>
>
>
>
>
>
>
>
>
>
>
>
> "Maxi" wrote in message
> news:
>> Hola, mmm no creo que sea muy recomendado hacer eso en un trigger, cual
>> es
>> el problema real que debes resolver? porque lo que nos has indicado es
>> una
>> solucion a un X problema, yo te podria decir como hacerlo pero no es


una
>> buena practica hacer esto en los triggers, con lo cual me gustaria


saber
>> realmente que necesitas resolver y podremos empezar a elaborar la
>> solucion
>> que mas se pueda adecuar, me resisto a pensar que necesites si o si un
>> trigger con una tabla temportal :s
>>
>>
>> Maxi - Buenos Aires - Argentina
>> Desarrollador 3 Estrellas
>>
>> Msn_messager:
>> mail: Maxi.da[arroba]gmail.com
>>
>> "Alonso" escribió en el mensaje
>> news:
>> > Necesito crear en un trigger una tabla temporal que me resuma los
>> > registros
>> > de INSERTEd sobre un campo pues la voy a utilizar en distintas
>> > instrucciones
>> > consecutivas.
>> >
>> > Se puede hacer y como ?
>> >
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida