Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error:The multi-part identifier "tmp.Cantidad" could not be bound.

Estas en el tema de Error:The multi-part identifier "tmp.Cantidad" could not be bound. en el foro de SQL Server en Foros del Web. Hola a todos. Tengo un problema con una tabla temporal lo que pasa es que estoy recorriendolo en un looping (while) cada registro y sirviendome ...
  #1 (permalink)  
Antiguo 15/10/2006, 16:50
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta Error:The multi-part identifier "tmp.Cantidad" could not be bound.

Hola a todos. Tengo un problema con una tabla temporal lo que pasa es que estoy recorriendolo en un looping (while) cada registro y sirviendome con los campos que arroja cada fila. Intento utilizar estos capos para transacciones como inserts o Update que estan dentro del lopping, pero me sale un error del tipo:
The multi-part identifier "tmp.Cantidad" could not be bound.
Es como si no le reconociera estos campos de la tabla temporal
Estoy trabajando con SQLServer 2005.
Les adjunto un fragmento de mi codigo:

--CREO MI TABLA TEMPORAL
create table #Temp_DetalleOrdenes
(

secuencia int identity,
IdArticulo int,
Cantidad decimal(18,4),
CantidadFaltante decimal(18,4),
Costo decimal(18,4),
Pvp decimal(18,4),
IdTrxOrden int,
IdBodegaDest int,
IdTransaccion0 int
)
--LO ASIGNO VALORES DE UN XML
insert into #Temp_DetalleOrdenes
(
IdArticulo,
Cantidad,
CantidadFaltante,
Costo,
Pvp,
IdBodegaDest,
IdTrxOrden,
IdTransaccion0
)
select
IdArticulo,
Cantidad,
CantidadFaltante,
Costo,
PVP,
IdBodegaDest,
IdTrxOrden,
IdTransaccion
from openxml(@VL_IdXML, '/Usuario/ResultSet/Detalle/Item')
with
(
IdArticulo int, Cantidad decimal(18,4), CantidadFaltante decimal(18,4),
Costo decimal(18,4), Pvp decimal(18,4), IdBodegaDest int,
IdTrxOrden int, IdTransaccion int
)
--CREO UN LOOPING
--select '@numrows'=@numrows
declare @x int
set @x=1

while @x <= @numrows -- Cantidad total de registros para barrerme
Begin
--SELECCIONO LOS RTEGISTROS DE LA FILA ACTUAL PARA UTILIZARLOS LUEGO
select
tmp.IdTransaccion0, tmp.IdTrxOrden, tmp.IdArticulo, tmp.Cantidad, tmp.CantidadFaltante, tmp.Costo, tmp.PVP, tmp.IdBodegaDest

from #Temp_DetalleOrdenes tmp
where tmp.secuencia=@x

--HAGO UNA TRANSACCION DE UPDATE
Update Inv_DetalleOrdenIngresoEgreso
set
Cantidad=tmp.Cantidad, -- De la tabla temporal(*)
CantidadFaltante=tmp.CantidadFaltante -- De la tabla temporal(*)
Where
IdEmpresa = @VL_IdEmpresa
and IdOficina = @VL_IdOficina
and IdBodega = @VL_IdBodega
and IdMotivo = @VL_IdMotivo
and IdTransaccion = @V_IdTransaccion -- De la tabla temporal (*)
and IdArticulo = @V_IdArticulo -- De la tabla temporal (*)


(*): EL ERROR ME SALE EN ESTOS CAMPOS.. Cómo hago?
Gracias por ayudarme...!!!
  #2 (permalink)  
Antiguo 16/10/2006, 09:45
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
No puedes usar los campos de una tabla fuera de operaciones como SELECT, INSERT, UPDATE, DELETE

Update Inv_DetalleOrdenIngresoEgreso
set
Cantidad=tmp.Cantidad

Es inválido debido a lo que comento. Mejor prueba con algo como esto (que probablemente te ayude a deshacerte del loop):

Update DOIE
set
DOIE.Cantidad=DO.Cantidad,
DOIE.CantidadFaltante=DO.CantidadFaltante
FROM Inv_DetalleOrdenIngresoEgreso DOIE
INNER JOIN #Temp_DetalleOrdenes DO
ON DOIE.llave = DO.llave
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 16/10/2006, 10:12
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cita:
Iniciado por LUISESPOCH Ver Mensaje
while @x <= @numrows -- Cantidad total de registros para barrerme
Begin
--SELECCIONO LOS RTEGISTROS DE LA FILA ACTUAL PARA UTILIZARLOS LUEGO
select
tmp.IdTransaccion0, tmp.IdTrxOrden, tmp.IdArticulo, tmp.Cantidad, tmp.CantidadFaltante, tmp.Costo, tmp.PVP, tmp.IdBodegaDest

from #Temp_DetalleOrdenes tmp
where tmp.secuencia=@x

--HAGO UNA TRANSACCION DE UPDATE
Update Inv_DetalleOrdenIngresoEgreso
set
Cantidad=tmp.Cantidad, -- De la tabla temporal(*)
CantidadFaltante=tmp.CantidadFaltante -- De la tabla temporal(*)
Where
IdEmpresa = @VL_IdEmpresa
and IdOficina = @VL_IdOficina
and IdBodega = @VL_IdBodega
and IdMotivo = @VL_IdMotivo
and IdTransaccion = @V_IdTransaccion -- De la tabla temporal (*)
and IdArticulo = @V_IdArticulo -- De la tabla temporal (*)


(*): EL ERROR ME SALE EN ESTOS CAMPOS.. Cómo hago?
Gracias por ayudarme...!!!

Eje!!!! los admininstradores del foro darán alguna comisión por traer usuarios nuevos en el foro?

Que tal amigo, tu error está en que tmp.Cantidad (y el resto de variables de la tabla temporal) no está declarada. En el select que haces al inicio del while debes declarar una variable @cantidad y cuando haces el select guardar el valor que te trae el select en dicha variable y luego en el update haces referencia a dicha variable. Igual con el resto de campos de la tabla temporal
  #4 (permalink)  
Antiguo 16/10/2006, 15:47
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 17 años, 6 meses
Puntos: 0
no era ta grave

Graciasd a las personas que me respondieron, sin embargop logré resolverlo despues de algunos minutos de inspiraciòn :). El asunto es que no debi hacer referencia al alias de la tabla temporal...

NO....
tmp.IdTransaccion0, tmp.IdTrxOrden, tmp.IdArticulo, tmp.Cantidad, tmp.CantidadFaltante, tmp.Costo, tmp.PVP, tmp.IdBodegaDest

from #Temp_DetalleOrdenes tmp
where tmp.secuencia=@x

SI...
Cantidad, CantidadFaltante,...

from #Temp_DetalleOrdenes
where secuencia=@x

Eso era todo..
  #5 (permalink)  
Antiguo 17/10/2006, 09:11
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Que hubo Luis... Si ves lo que pasa por trabajar en domingo

que tal Mithrandir, mmm creo que es algo complicado el update que propones ya que el las claves primarias de ambas tablas no son las mismas
  #6 (permalink)  
Antiguo 17/10/2006, 17:33
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Pero basta con que los campos en ambas tablas sean suficientes para hacer el JOIN, no necesariamente las llaves primarias de ambas tablas (de hecho, eso casi nunca sucede)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 18/10/2006, 08:50
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Si, tienes razón... ya los voy a probar en mis procedimientos que son similares en su estructura que los del Luis
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:17.