Error al hacer un Update.

01/12/2003 - 00:07 por marcelo | Informe spam
Tengo un sistema que vienen facturas con los valores en
DOLARES y a medida que se carga se crean los mismos
registros pero en EUROS y se saca el factor de conversión
de una moneda a la otra de la tabla VALORESCAMBIO (abajo
están los scripts).
El problema es que estos factores de cambio pueden
cambiar para el pasado entonces tengo que tener la
posibilidad de recalcular los registros ya generados.
Para lo que hago el Update de acá abajo pero cuando lo
ejecuto me da el error:
The table 'FACTURAS' is ambiguous.
Esto seguro que es porque hago un Join de Facturas (fac)
con Facturas (fac2) pero este JOIN es necesario!!! Cómo
hago entonces para que NO me de error?????


UPDATE FACTURAS
SET importe = fac2.importe * cam.factor_cambio
FROM
FACTURAS fac
INNER JOIN VALORESCAMBIO cam ON fac.MonedaID =
cam.MonedaIDOrigen and fac.fecha = cam.fecha
INNER JOIN FACTURAS fac2 ON fac.FacturaID =
fac2.FacturaID and
fac.fecha = fac2.fecha and fac.MonedaID <> 1 and
fac2.MonedaID = 1
WHERE
cam.MonedaIDDestino = 1



Script de tablas y carga de Valores de ejemplo:


CREATE TABLE [dbo].[VALORESCAMBIO] (
[MonedaIDOrigen] [int] NOT NULL ,
[MonedaIDDestino] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[factor_cambio] [numeric](18, 4) NOT NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[FACTURAS] (
[FacturaID] [int] NOT NULL ,
[MonedaID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Importe] [numeric](18, 4) NOT NULL ,
[ClienteID] [int] NOT NULL
) ON [PRIMARY]
GO


Insert Into FACTURAS
values(12, 1, '01/12/2003', 25, 1)

Insert Into FACTURAS
values(12, 2, '01/12/2003', 31, 1)

Insert Into FACTURAS
values(21, 1, '05/12/2003', 10, 2)

Insert Into FACTURAS
values(21, 2, '05/12/2003', 18, 2)

Insert Into FACTURAS
values(58, 1, '09/12/2003', 40, 15000)

Insert Into FACTURAS
values(58, 2, '09/12/2003', 52, 15000)


Insert Into VALORESCAMBIO
values(2, 1,'01/12/2003', 2.3)


Insert Into VALORESCAMBIO
values(2, 1,'02/12/2003', 2.1)


Insert Into VALORESCAMBIO
values(2, 1,'03/12/2003', 2.4)


Insert Into VALORESCAMBIO
values(2, 1,'04/12/2003', 2.5)


Insert Into VALORESCAMBIO
values(2, 1,'05/12/2003', 2.0)


Insert Into VALORESCAMBIO
values(2, 1,'06/12/2003', 1.8)


Insert Into VALORESCAMBIO
values(2, 1,'07/12/2003', 2.5)


Insert Into VALORESCAMBIO
values(2, 1,'08/12/2003', 2.2)


Insert Into VALORESCAMBIO
values(2, 1,'09/12/2003', 2.25)
 

Leer las respuestas

#1 ulises
01/12/2003 - 02:04 | Informe spam
Prueba con :

UPDATE FACTURAS
SET importe = ( SELECT fac.importe * cam.factor_cambio
FROM FACTURAS fac INNER JOIN VALORESCAMBIO cam
ON fac.MonedaID = cam.MonedaIDDestino AND
fac.fecha = cam.fecha
WHERE fac.FacturaID = FACTURAS.FacturaID
AND fac.fecha = FACTURAS.fecha )
WHERE Facturas.MonedaID <> 1


pero me parece que sería más fácil y más limpio borrar todos los
registros correspondientes a la fecha que ha sido modificada y
recalcularlas de nuevo.

Saludos,
Ulises

On Sun, 30 Nov 2003 15:07:08 -0800, "marcelo"
wrote:

Tengo un sistema que vienen facturas con los valores en
DOLARES y a medida que se carga se crean los mismos
registros pero en EUROS y se saca el factor de conversión
de una moneda a la otra de la tabla VALORESCAMBIO (abajo
están los scripts).
El problema es que estos factores de cambio pueden
cambiar para el pasado entonces tengo que tener la
posibilidad de recalcular los registros ya generados.
Para lo que hago el Update de acá abajo pero cuando lo
ejecuto me da el error:
The table 'FACTURAS' is ambiguous.
Esto seguro que es porque hago un Join de Facturas (fac)
con Facturas (fac2) pero este JOIN es necesario!!! Cómo
hago entonces para que NO me de error?????


UPDATE FACTURAS
SET importe = fac2.importe * cam.factor_cambio
FROM
FACTURAS fac
INNER JOIN VALORESCAMBIO cam ON fac.MonedaID =
cam.MonedaIDOrigen and fac.fecha = cam.fecha
INNER JOIN FACTURAS fac2 ON fac.FacturaID =
fac2.FacturaID and
fac.fecha = fac2.fecha and fac.MonedaID <> 1 and
fac2.MonedaID = 1
WHERE
cam.MonedaIDDestino = 1



Script de tablas y carga de Valores de ejemplo:


CREATE TABLE [dbo].[VALORESCAMBIO] (
[MonedaIDOrigen] [int] NOT NULL ,
[MonedaIDDestino] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[factor_cambio] [numeric](18, 4) NOT NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[FACTURAS] (
[FacturaID] [int] NOT NULL ,
[MonedaID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Importe] [numeric](18, 4) NOT NULL ,
[ClienteID] [int] NOT NULL
) ON [PRIMARY]
GO


Insert Into FACTURAS
values(12, 1, '01/12/2003', 25, 1)

Insert Into FACTURAS
values(12, 2, '01/12/2003', 31, 1)

Insert Into FACTURAS
values(21, 1, '05/12/2003', 10, 2)

Insert Into FACTURAS
values(21, 2, '05/12/2003', 18, 2)

Insert Into FACTURAS
values(58, 1, '09/12/2003', 40, 15000)

Insert Into FACTURAS
values(58, 2, '09/12/2003', 52, 15000)


Insert Into VALORESCAMBIO
values(2, 1,'01/12/2003', 2.3)


Insert Into VALORESCAMBIO
values(2, 1,'02/12/2003', 2.1)


Insert Into VALORESCAMBIO
values(2, 1,'03/12/2003', 2.4)


Insert Into VALORESCAMBIO
values(2, 1,'04/12/2003', 2.5)


Insert Into VALORESCAMBIO
values(2, 1,'05/12/2003', 2.0)


Insert Into VALORESCAMBIO
values(2, 1,'06/12/2003', 1.8)


Insert Into VALORESCAMBIO
values(2, 1,'07/12/2003', 2.5)


Insert Into VALORESCAMBIO
values(2, 1,'08/12/2003', 2.2)


Insert Into VALORESCAMBIO
values(2, 1,'09/12/2003', 2.25)


Preguntas similares