Problma con Trigger

13/01/2010 - 18:55 por Francisco Goncalves | Informe spam
Hola Grupo

Tengo un problema con un Trigger que no logro identifcar.

El caso es que ingreso un par de registros en una tabla llamada NotasEntrega
desde otro trigger. En esta tabla NotasEntrega tengo un trigger for insert
que calcula un total desde otras tablas una vez se inserta un registro. El
problema es que le asigna la sumatoria a cada uno de los regitros en vez de
ponerle a cada uno su valor. Si lo hago por FOR UPDATE y modifico el
registro manualmente si me lo pone bien, o si inserto un registro manualmente
tambien lo hace bien.

Aca les pongo el codigo:

declare @idproducto as varchar(8), @cantidad as int, @totalnota as money

SELECT @totalnota = sum((p.valorfacial*vd.cantidad)*(p.porcpdv/100)) +
(sum((p.valorfacial*vd.cantidad)*(p.porcpdv/100)) * (SELECT porcislrpdv / 100
FROM configuracion))
FROM VentasDetail vd, productos p, NotasEntrega n, Inserted
WHERE vd.idproducto=p.id and vd.idmaster = inserted.idventa and
vd.idpdv=inserted.idpdv and n.iditem=inserted.iditem

UPDATE NotasEntrega set totalnota=@totalnota
FROM NotasEntrega n, inserted
WHERE n.iditem=inserted.iditem


El campo iditem es un autonumerico en la tabla NotasEntrega.

Que me esta faltando ?

De antemano gracias
 

Leer las respuestas

#1 Alejandro Mesa
13/01/2010 - 19:41 | Informe spam
Francisco Goncalves,

Ten presente que los triggers se disparan por cada operacion (insert /
update / delete) y no por cada fila afectada por la operacion.

Dicho lo anterior, debes programar tu trigger de forma que tenga en cuenta
que multiples filas pueden haber sido afectadas.

Deberas calcular @totlanota por cada fila perteneciente a la tabla virtual
INSERTED.


AMB

"Francisco Goncalves" wrote:

Hola Grupo

Tengo un problema con un Trigger que no logro identifcar.

El caso es que ingreso un par de registros en una tabla llamada NotasEntrega
desde otro trigger. En esta tabla NotasEntrega tengo un trigger for insert
que calcula un total desde otras tablas una vez se inserta un registro. El
problema es que le asigna la sumatoria a cada uno de los regitros en vez de
ponerle a cada uno su valor. Si lo hago por FOR UPDATE y modifico el
registro manualmente si me lo pone bien, o si inserto un registro manualmente
tambien lo hace bien.

Aca les pongo el codigo:

declare @idproducto as varchar(8), @cantidad as int, @totalnota as money

SELECT @totalnota = sum((p.valorfacial*vd.cantidad)*(p.porcpdv/100)) +
(sum((p.valorfacial*vd.cantidad)*(p.porcpdv/100)) * (SELECT porcislrpdv / 100
FROM configuracion))
FROM VentasDetail vd, productos p, NotasEntrega n, Inserted
WHERE vd.idproducto=p.id and vd.idmaster = inserted.idventa and
vd.idpdv=inserted.idpdv and n.iditem=inserted.iditem

UPDATE NotasEntrega set totalnota=@totalnota
FROM NotasEntrega n, inserted
WHERE n.iditem=inserted.iditem


El campo iditem es un autonumerico en la tabla NotasEntrega.

Que me esta faltando ?

De antemano gracias

Preguntas similares