Update con Inner Join

Tengo una tabla con el detalle de las compras y cree un desencadenador para que actualice el inventario al momento de eliminar un registro de la tabla detalle. Reingresar la cantidad pedida.
CREATE DESENCADENADOR DelDetalleFactura
ON DetalleFacturas
FOR DELETE
AS
UPDATE KARDEX
SET SALDODOCUMENTAL = SALDODOCUMENTAL + DELETED.CANTIDAD
FROM KARDEX INNER JOIN DELETED
ON KARDEX.CODIGOZOFRIID = DELETED.CODIGOZOFRIID
El problema se produce cuando hay más de un producto con igual código en detalleFactura, en ese momento no actualiza las existencias. Pero cuando hay uno solo ningún problema.
tambien intente hacer un procedimiento almacenado
Alter PROCEDURE SPDelFactura (@FacturaID as numeric(9)) AS
DECLARE @error int
begin tran
UPDATE dbo.Kardex SET dbo.Kardex.SaldoDocumental = dbo.Kardex.SaldoDocumental + dbo.DetalleFacturas.Cantidad
FROM dbo.Kardex INNER JOIN dbo.DetalleFacturas ON
(dbo.Kardex.CodigoZofriID = dbo.DetalleFacturas.CodigoZofriID) WHERE dbo.DetalleFacturas.FacturaID = @FacturaID
SET @error = @@error
if (@error<>0) goto Deshacer
DELETE Facturas WHERE FacturaID = @FacturaID
SET @error = @@error
if (@error<>0) goto Deshacer
commit tran
goto fin
Deshacer:
rollback tran
return @error
fin:
return 0
En este caso solo recupera el saldo del primer item con el mismo código.
Ojala me puedas ayudar estoy entrampado en este tema hace varios días.

2 Respuestas

Respuesta
1
Te pido que pases la estructura de las tablas o las relcaiones porque no tengo claro el modelo y mientras tanto traducimos un poco para ver si sale...
--------------------------
UPDATE Kardex SET Kardex.SaldoDocumental = dbo.Kardex.SaldoDocumental + dbo.DetalleFacturas.Cantidad
FROM Kardex,DetalleFacturas
where (dbo.Kardex.CodigoZofriID = dbo.DetalleFacturas.CodigoZofriID)
AND dbo.DetalleFacturas.FacturaID = @FacturaID
---------------
A modo de debugging te diría que tires el select * FROM.. y todo el from del update que estás usando a ver si es que se está haciendo bien ese join.
Gracias Estimado, ya resolvi mi duda, te adjunto la consulta
UPDATE dbo.Kardex SET dbo.Kardex.SaldoDocumental = dbo.Kardex.SaldoDocumental + X.Total
FROM dbo.Kardex INNER JOIN
(SELECT dbo.DetalleFacturas.CodigoZofriID,SUM(dbo.DetalleFacturas.Cantidad) as Total
FROM dbo.DetalleFacturas WHERE dbo.DetalleFacturas.FacturaID = @FacturaID
GROUP BY dbo.DetalleFacturas.CodigoZofriID) AS X
ON (dbo.Kardex.CodigoZofriID = X.CodigoZofriID)
Saludos
Respuesta
1
Y si cambias tu trigger así:
Update kardex set saldoducmental = saldodocumental + x.Total
From kardex inner join (select codigozofriid, sum(cantidad) as Total from deleted group by codigozofriid) as x
On kardex.codigozofriid = x.codigozofriid
Estimado, Gracias por tu ayuda hice un group by dentro del update del procedimiento almacenado y funciono a la perfección..
Gracias nuevamente por tu tiempo.
Saludos Rodrigo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas