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

#11 Maxi
06/06/2005 - 00:26 | Informe spam
Hola Jose, lamento no coincidir :( con tu criterios entonces se deberia usar
los triggers y hasta desarrollarlos para pocos registros, ojo con eso, no es
asi, los triggers deben estar pensado para trabajar en conjunto de registros
y no registro a registro.

Ahora, es cierto que para implementar un trigger deberia ser de ultima, yo
solo los uso en casos muy particulares como por ej Auditoria de sistemas.

Un abrazo


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

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

"Jose" escribió en el mensaje
news:%
Cierto, pero yo me refiero a que para pensar en resolver un problema con
un
trigger debe analizarse que sea un caso donde no sea frecuente la
actualizacion de grandes conjuntos de registros. En aplicaciones comunes
se
dan muchos casos de tablas donde practicamente nunca se actualiza mas de
un
registro por vez . Por tanto la complejidad del codigo del trigger no le
afecta mucho.
Empero, si hay que estar haciendo DTS o enviando conjuntos voluminosos
por
XML con frecuencia pues yo creo que no debe tenerse el trigger en la
tabla,
y manejar esos calculos con vistas u otra forma. Ese es mi punto de
vista.



"Maxi" wrote in message
news:%
Hola Jose, en que te basas ? porque un trigger no quiere decir que son


pocos
registros, seran todos los registros que se insertaran, imaginate luego
un
paquete DTS que deba pasar datos a esta tabla de otro sistema (por ej un
Xml) con unos cuantos registros ;)


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

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

"Jose" escribió en el mensaje
news:
> Yo pienso que si es para un trigger, es de esperarse que la tabla


inserted
> tenga pocos registros. Si no lo es pues es mejor que no use un trigger


y
> mejor una vista indexada. Porque los triggers (aunque tengan mucho
> codigo)
> para mi solo son buenos cuando se insertan o modifican pequenos


conjuntos
> de
> registros (o de un solo registro).
>
>
> "Maxi" wrote in message
> news:
>> Hola, a ver, con variables tipo table es una forma, pero mucho
>> cuidado,
>> si
>> son muchos registros vas a tener un enorme problema de performance.
>>
>> De todas maneras con una tabla temporal no seria mas que esto:
>>
>>
>> use northwind
>> Go
>>
>> create trigger m_tr1 on customers for insert as
>> select * into #tbl from inserted
>>
>>
>> Maxi - Buenos Aires - Argentina
>> Desarrollador 3 Estrellas
>>
>> Msn_messager:
>> mail: Maxi.da[arroba]gmail.com
>>
>> "Alonso" escribió en el mensaje
>> news:%
>> > 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
#12 Alonso
06/06/2005 - 01:03 | Informe spam
Eso ya es mas razonable.

Saludos.

"Jose" wrote in message
news:%
Cierto, pero yo me refiero a que para pensar en resolver un problema con


un
trigger debe analizarse que sea un caso donde no sea frecuente la
actualizacion de grandes conjuntos de registros. En aplicaciones comunes


se
dan muchos casos de tablas donde practicamente nunca se actualiza mas de


un
registro por vez . Por tanto la complejidad del codigo del trigger no le
afecta mucho.
Empero, si hay que estar haciendo DTS o enviando conjuntos voluminosos


por
XML con frecuencia pues yo creo que no debe tenerse el trigger en la


tabla,
y manejar esos calculos con vistas u otra forma. Ese es mi punto de


vista.



"Maxi" wrote in message
news:%
> Hola Jose, en que te basas ? porque un trigger no quiere decir que son
pocos
> registros, seran todos los registros que se insertaran, imaginate luego


un
> paquete DTS que deba pasar datos a esta tabla de otro sistema (por ej un
> Xml) con unos cuantos registros ;)
>
>
> Maxi - Buenos Aires - Argentina
> Desarrollador 3 Estrellas
>
> Msn_messager:
> mail: Maxi.da[arroba]gmail.com
>
> "Jose" escribió en el mensaje
> news:
> > Yo pienso que si es para un trigger, es de esperarse que la tabla
inserted
> > tenga pocos registros. Si no lo es pues es mejor que no use un


trigger
y
> > mejor una vista indexada. Porque los triggers (aunque tengan mucho
> > codigo)
> > para mi solo son buenos cuando se insertan o modifican pequenos
conjuntos
> > de
> > registros (o de un solo registro).
> >
> >
> > "Maxi" wrote in message
> > news:
> >> Hola, a ver, con variables tipo table es una forma, pero mucho


cuidado,
> >> si
> >> son muchos registros vas a tener un enorme problema de performance.
> >>
> >> De todas maneras con una tabla temporal no seria mas que esto:
> >>
> >>
> >> use northwind
> >> Go
> >>
> >> create trigger m_tr1 on customers for insert as
> >> select * into #tbl from inserted
> >>
> >>
> >> Maxi - Buenos Aires - Argentina
> >> Desarrollador 3 Estrellas
> >>
> >> Msn_messager:
> >> mail: Maxi.da[arroba]gmail.com
> >>
> >> "Alonso" escribió en el mensaje
> >> news:%
> >> > 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
#13 qwalgrande
06/06/2005 - 21:06 | Informe spam
Hola.

En tu caso, yo prepararía un procedimiento almacenado para actualizar la
tabla de acumulados, cada uno de los valores por separado. Luego metería la
ejecución del procedimiento almacenado en un job y lo lanzaría cada poco
tiempo (tan poco como tú consideres). Indexas bien y te va a ir como un
tiro. Puedes incluso ver si tienes que actualizar el registro antes de
lanzar el update (si lo que hay y lo que vas a poner es lo mismo, no hace
falta que lo lances). Todo ello con transacciones cortas y rápidas, evitando
que en cada movimiento de la tabla transaccionproyecto se vea penalizado el
rendimiento con el cálculo del acumulado.

Así obtienes una tabla de acumulados que se actualiza cada x tiempo,
pongamos cada 1 minuto, puede ser más o menos, según tú decidas. Y si se da
el caso de que haya alguna consulta especialmente crítica en la que haya que
asegurarse que el dato es absolutamente fiable, pues antes de consultar,
lanzas manualmente el procedimiento almacenado.

Lo que comentas puede provocarte muchos bloqueos. Además, lo de los triggers
es algo que no me gusta (personalmente). Si hay otra forma, prefiero siempre
no usarlos.

qwalgrande

"De lo que ves créete la mitad, de lo que no ves no te creas nada"
V. del V.


"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
#14 Maxi
06/06/2005 - 21:14 | Informe spam
Amigo, es bueno lo que indicas pero tiene un gran problema: Queda la
informacion fuera de tiempo y no esta online el acumulado a menos que hagas
que el JOB se dispare por segundo, lo cual es peor aun :(

Yo en estos casos uso vistas indexadas, te olvidas de los triggers y la
informacion la tenes al vuelo :-)


Salu2
Maxi


"qwalgrande" escribió en el mensaje
news:
Hola.

En tu caso, yo prepararía un procedimiento almacenado para actualizar la
tabla de acumulados, cada uno de los valores por separado. Luego metería
la ejecución del procedimiento almacenado en un job y lo lanzaría cada
poco tiempo (tan poco como tú consideres). Indexas bien y te va a ir como
un tiro. Puedes incluso ver si tienes que actualizar el registro antes de
lanzar el update (si lo que hay y lo que vas a poner es lo mismo, no hace
falta que lo lances). Todo ello con transacciones cortas y rápidas,
evitando que en cada movimiento de la tabla transaccionproyecto se vea
penalizado el rendimiento con el cálculo del acumulado.

Así obtienes una tabla de acumulados que se actualiza cada x tiempo,
pongamos cada 1 minuto, puede ser más o menos, según tú decidas. Y si se
da el caso de que haya alguna consulta especialmente crítica en la que
haya que asegurarse que el dato es absolutamente fiable, pues antes de
consultar, lanzas manualmente el procedimiento almacenado.

Lo que comentas puede provocarte muchos bloqueos. Además, lo de los
triggers es algo que no me gusta (personalmente). Si hay otra forma,
prefiero siempre no usarlos.

qwalgrande

"De lo que ves créete la mitad, de lo que no ves no te creas nada"
V. del V.


"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 ?
>
>
>










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