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

[SOLUCIONADO] Cursor devuelve valores erróneos al ordenar datos por fecha

Estas en el tema de Cursor devuelve valores erróneos al ordenar datos por fecha en el foro de Bases de Datos General en Foros del Web. Hola foro Espero alguien me pueda ayudar a resolver este problema. Expongo lo más breve posible el ambiente. Tengo una tabla temporal @Ttemp1 (Parte, Existencia, ...
  #1 (permalink)  
Antiguo 15/01/2015, 09:28
Avatar de Master_gdl  
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Cursor devuelve valores erróneos al ordenar datos por fecha

Hola foro
Espero alguien me pueda ayudar a resolver este problema. Expongo lo más breve posible el ambiente.

Tengo una tabla temporal
@Ttemp1 (Parte, Existencia, Cantidad Compras, Fecha Compra, Almacén, FechaInf) mi cursor corre sobre esta tabla.

Lo que se supone que hace el cursor es calcular la vejes de cada parte, esto la hace restando en la existencia la cantidad de mi última compra si el resultado es positivo avanza a la segunda fecha de compra y así sucesivamente hasta llegar a 0.

Estos resultados los almacena en otra tabla temporal @Ttemp2, que finalmente es la que muestra la información obtenida.

Mi problema es que, esta tarea la realiza en el orden en que aparece la información en la tabla y no en el orden de las fechas, si pongo la instrucción ORDER BY fecha DESC en la tabla @Ttemp1, para que los primeros datos que lee el cursor sean las últimas compras, me arroja valores errados.

Alguien que pudiera ayudarme a resolver este problema, ya tengo 2 días tratando de resolverlo y nada.
Saludos
  #2 (permalink)  
Antiguo 16/01/2015, 08:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Cursor devuelve valores erróneos al ordenar datos por fecha

un ejemplo de tus datos ayudaria mucho :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/01/2015, 14:39
Avatar de Master_gdl  
Fecha de Ingreso: enero-2015
Mensajes: 4
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cursor devuelve valores erróneos al ordenar datos por fecha

Libra Gracias por interesarte en mi mensaje,

Este es el código del cursor que estoy utilizando:

DECLARE CCalcula CURSOR
FOR
SELECT Site, Parte, Existencias, Cantidad, CostoUSD, CostoMN, Fecha, Referencia
FROM @mcCTAntiguedadInventarioAux
ORDER BY Site,Parte,Fecha desc

OPEN CCalcula

FETCH NEXT FROM CCalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia

WHILE @@fetch_status = 0
BEGIN
----------------------------------------------------------------------------------------------------------------
IF @parteAnterior <> @parte
BEGIN
IF @contador < @existenciaAnterior
BEGIN
SET @aux = (@existenciaAnterior - @contador)


SET @auxUSD = (
SELECT TOP (1)
CostoUSD
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parteAnterior
)
SET @auxMN = (
SELECT TOP (1)
CostoMN
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parteAnterior
)

BEGIN TRY
INSERT INTO @mcCTAntiguedadInventario (Site, Parte, Cantidad, costoUSD,
CostoMN, Fecha, Referencia,
TipoRespaldo, FechaRespaldo)
VALUES (@nSite, @parteAnterior, @aux, @auxUSD, @auxMN,
DATEADD(yy, -2, @fanalisis), 'INV INICIAL', @tipoanalisis,
@fanalisis)


END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
END
--REINICIA LAS VARIABLES DEL ANALISIS
SET @parteAnterior = @parte
SET @contador = 0
SET @existenciaAnterior = @existencia
SET @aux = 0
SET @auxMN = 0
SET @auxUSD = 0
END

IF (@existencia - @contador) = 0
BEGIN
FETCH NEXT FROM CCalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN,
@fecha, @referencia
CONTINUE
END

IF @cantidad > (@existencia - @contador)
BEGIN
SET @cantidad = (@existencia - @contador)
END

SET @cantidad = ISNULL(@cantidad, 0)
IF @cantidad = 0
BEGIN

SET @cantidad = (@existencia - @contador)


SET @costoUSD = (
SELECT TOP (1)
CostoUSD
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parte
)
SET @costoMN = (
SELECT TOP (1)
CostoMN
FROM @mcCTAntiguedadInventarioAux
WHERE Site = @nSite AND
Parte = @parte
)

SET @fecha = DATEADD(yy, -2, @fanalisis)
SET @referencia = 'INV INCIAL'


END
BEGIN TRY

INSERT INTO @mcCTAntiguedadInventario (Site, Parte, Cantidad, costoUSD, CostoMN, Fecha,
Referencia, TipoRespaldo, FechaRespaldo)
VALUES (@nSite, @parte, @cantidad, @costoUSD, @costoMN, @fecha, @referencia, @tipoanalisis,
@fanalisis)


END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
SET @contador = @contador + @cantidad
---------------------------------------------------------------------------------------------------------------
FETCH NEXT FROM CCalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha,
@referencia
END

CLOSE CCalcula
DEALLOCATE CCalcula



INSERT INTO [dbo].[mcCTAntiguedadInventario]
SELECT *
FROM @mcCTAntiguedadInventario

Última edición por Master_gdl; 19/01/2015 a las 10:17 Razón: por error precione guardar antes de terminar

Etiquetas: cursor, devuelve, fecha, tabla
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 23:43.