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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Alejandro Mesa
13/01/2010 - 19:44 | Informe spam
Consideraciones acerca de operaciones con varias filas para desencadenadores
DML
http://msdn.microsoft.com/es-es/library/ms190752(SQL.90).aspx


AMB

"Alejandro Mesa" wrote:

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
Respuesta Responder a este mensaje
#3 Francisco Goncalves
13/01/2010 - 19:46 | Informe spam
Hola Alejandro

Si de hecho tengo en el where el condicional para Inserted incluso con
varias columnas para asegurar que sea unico cada registro pero con todo y eso
no logro que sume por grupos.



"Alejandro Mesa" wrote:

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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida