Trigger para Delete

02/09/2008 - 08:43 por Angel Zapata | Informe spam
Hola compañeros,

tengo una tabla con el historico de una serie de movimientos, y he creado un desencadenador
para que cuando se grabe un movimiento nuevo actualice las existencias de dicho articulo en el
almacen correspondiente, y otro para cuando se borra un registro, el problema es que cuando se
inserta un registro todo funciona pero cuando se borra no hace nada.

No encuentro el porque no funciona, lo que si se es que si le indico, en la clausula WHERE el
número de movimiento genera un error, y si no lo indico es totalmente imprevisible.

¿Alguna sugerencia?

/*Desencadenador para borrar*/
ALTER TRIGGER AlmacenMovimientosConcertacionBorrado
ON dbo.AlmacenMovimientosConcertacion
FOR DELETE
AS

UPDATE AlmacenExistencias
SET ExistenciasFisico = ExistenciasFisico + MovimientoCantidad
FROM AlmacenMovimientosConcertacion
WHERE AlmacenMovimientosConcertacion.MovimientoNumero IN (SELECT MovimientoNumero FROM Deleted)
AND AlmacenExistencias.AlmacenCodigo IN (SELECT MovimientoAlmacen FROM Deleted)
AND AlmacenExistencias.ArticuloCodigo IN (SELECT MovimientoArticulo FROM Deleted)



/*Desencadenador para insertar*/
ALTER TRIGGER AlmacenMovimientosConcertacionNuevo
ON AlmacenMovimientosConcertacion
FOR INSERT
AS

UPDATE AlmacenExistencias
SET ExistenciasFisico = ExistenciasFisico - MovimientoCantidad
FROM AlmacenMovimientosConcertacion
WHERE AlmacenMovimientosConcertacion.MovimientoNumero IN (SELECT MovimientoNumero FROM Inserted)
AND AlmacenExistencias.AlmacenCodigo IN (SELECT MovimientoAlmacen FROM Inserted)
AND AlmacenExistencias.ArticuloCodigo IN (SELECT MovimientoArticulo FROM Inserted)
Angel Zapata
Siglhogar XXI S.L.
"Si no sabes hacia adonde vas, lo mas probable es que no llegues a ninguna parte"
 

Leer las respuestas

#1 georgeguitar.jorge
02/09/2008 - 15:06 | Informe spam
Hola Angel: La verda yo tampoco veo el problema, pero proba haciendo
lo siguiente:

ALTER TRIGGER AlmacenMovimientosConcertacionBorrado
ON dbo.AlmacenMovimientosConcertacion
FOR DELETE
AS

UPDATE AlmacenExistencias
SET ExistenciasFisico = ExistenciasFisico +
MovimientoCantidad
FROM AlmacenMovimientosConcertacion A
INNER JOIN Deleted D On A.MovimientoNumero D.MovimientoNumero
INNER JOIN AlmacenExistencias E On
D.MovimientoAlmacen = E.AlmacenCodigo And D.MovimientoArticulo E.ArticuloCodigo

Puede que el al forzar una relacion entre la table Deleted y las otras
tablas te ayude.

Espero te sirva. Saludos.

Preguntas similares