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:
Mostrar la cita
#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:
Mostrar la cita
#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:
Mostrar la cita
resumirlo
Mostrar la cita
debo
Mostrar la cita
cual
Mostrar la cita
en
Mostrar la cita
es
Mostrar la cita
una
Mostrar la cita
solucion
Mostrar la cita
#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:
Mostrar la cita
#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:
Mostrar la cita
haciendo
Mostrar la cita
para
Mostrar la cita
de
Mostrar la cita
para
Mostrar la cita
de
Mostrar la cita
by
Mostrar la cita
by
Mostrar la cita
by
Mostrar la cita
subselect
Mostrar la cita
pues
Mostrar la cita
una
Mostrar la cita
saber
Mostrar la cita
Ads by Google
Search Busqueda sugerida