Inicio > SQL Server > panzaverde > UPDATE CON INNER JOIN

UPDATE CON INNER JOIN

Experto:
Usuario:
Fecha: 02/10/2008
Valoración: (3,00 sobre 5) Categoría: SQL Server
29/09/2008
rdneira, usuario preguntando en SQL Server
Usuario
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 mas de un producto con igual codigo en detalleFactura, en ese momento no actualiza las existencias. pero cuando hay uno solo ningun 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 codigo.
ojala me puedas ayudar estoy entrampado en este tema hace varios dias.
GRACIAS. Rodrigo
01/10/2008
rdneira, experto respondiendo en SQL Server
Experto
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.
Saludos
02/10/2008
rdneira, usuario preguntando en SQL Server
Usuario
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
Enlaces patrocinados