PDA

Ver la Versión Completa : Los SP y yo ....


tgsistemas
02-08-2004, 09:50:26
Hola a todos/as de nuevo :

De nuevo con una duda sobre los Stored Procedure .... :confused:

En SQL 7 y con D5 tengo una tabla cabecera que se llama PARTES y otra de detalle que se llama PARTESLIN. Corresponden a los partes horarios de los trabajadores (entrada, salida, horas trabajadas, produccion, etc....).
Ahora necesito generar un informe en el que muestre los datos agrupados por trabajador y fecha (referencia cruzada) similar a una hoja de cálculo de excel, se me ocurrio generarlo todo en un SP con este código :

use GESTPROD
GO
drop table TEMPORAL
drop procedure SP_PARTESINFORMES
go
create table TEMPORAL
( TRBJDOR char(60), NMROORDEN char(15), FECHA datetime, HT float, CNTCTOS float, CH float, VENTAS float)

GO
create procedure SP_PARTESINFORMES (@ORDENTEMP char(15), @FECHAD Datetime, @FECHAH Datetime)
as
begin
insert into TEMPORAL
select PARTES.CDGOTOP, PARTES.NMROORDEN, PARTES.FECHA, PARTESLIN.HT, PARTESLIN.CNTCTOS, PARTESLIN.VENTAS,
(PARTESLIN.CNTCTOS / PARTESLIN.HT) AS CH
from PARTES inner join PARTESLIN on PARTES.CDGO = PARTESLIN.CDGOPARTE
where ((PARTES.NMROORDEN = @ORDENTEMP)
AND
(PARTES.FECHA BETWEEN @FECHAD AND @FECHAH))
end
GO
SELECT FECHA,
SUM(CASE DAY(FECHA) WHEN 01 THEN HT ELSE 0 END) AS D1,
SUM(CASE DAY(FECHA) WHEN 02 THEN HT ELSE 0 END) AS D2,
SUM(CASE DAY(FECHA) WHEN 03 THEN HT ELSE 0 END) AS D3,
SUM(CASE DAY(FECHA) WHEN 04 THEN HT ELSE 0 END) AS D4,
SUM(CASE DAY(FECHA) WHEN 05 THEN HT ELSE 0 END) AS D5,
SUM(CASE DAY(FECHA) WHEN 06 THEN HT ELSE 0 END) AS D6,
SUM(CASE DAY(FECHA) WHEN 07 THEN HT ELSE 0 END) AS D7,
SUM(CASE DAY(FECHA) WHEN 08 THEN HT ELSE 0 END) AS D8,
SUM(CASE DAY(FECHA) WHEN 09 THEN HT ELSE 0 END) AS D9,
SUM(CASE DAY(FECHA) WHEN 10 THEN HT ELSE 0 END) AS D10,
SUM(CASE DAY(FECHA) WHEN 11 THEN HT ELSE 0 END) AS D11,
SUM(CASE DAY(FECHA) WHEN 12 THEN HT ELSE 0 END) AS D12,
SUM(CASE DAY(FECHA) WHEN 13 THEN HT ELSE 0 END) AS D13,
SUM(CASE DAY(FECHA) WHEN 14 THEN HT ELSE 0 END) AS D14,
SUM(CASE DAY(FECHA) WHEN 15 THEN HT ELSE 0 END) AS D15,
SUM(CASE DAY(FECHA) WHEN 16 THEN HT ELSE 0 END) AS D16,
SUM(CASE DAY(FECHA) WHEN 17 THEN HT ELSE 0 END) AS D17,
SUM(CASE DAY(FECHA) WHEN 18 THEN HT ELSE 0 END) AS D18,
SUM(CASE DAY(FECHA) WHEN 19 THEN HT ELSE 0 END) AS D19,
SUM(CASE DAY(FECHA) WHEN 20 THEN HT ELSE 0 END) AS D20,
SUM(CASE DAY(FECHA) WHEN 21 THEN HT ELSE 0 END) AS D21,
SUM(CASE DAY(FECHA) WHEN 22 THEN HT ELSE 0 END) AS D22,
SUM(CASE DAY(FECHA) WHEN 23 THEN HT ELSE 0 END) AS D23,
SUM(CASE DAY(FECHA) WHEN 24 THEN HT ELSE 0 END) AS D24,
SUM(CASE DAY(FECHA) WHEN 25 THEN HT ELSE 0 END) AS D25,
SUM(CASE DAY(FECHA) WHEN 26 THEN HT ELSE 0 END) AS D26,
SUM(CASE DAY(FECHA) WHEN 27 THEN HT ELSE 0 END) AS D27,
SUM(CASE DAY(FECHA) WHEN 28 THEN HT ELSE 0 END) AS D28,
SUM(CASE DAY(FECHA) WHEN 29 THEN HT ELSE 0 END) AS D29,
SUM(CASE DAY(FECHA) WHEN 30 THEN HT ELSE 0 END) AS D30,
SUM(CASE DAY(FECHA) WHEN 31 THEN HT ELSE 0 END) AS D31
FROM TEMPORAL
GROUP BY FECHA
GO


Cuando ejecuto el SP desde mi aplicación (pasándole los parámetros) se produce el siguiente error :
Error al crear el cursor
pero si compruebo los datos de la tabla "temporal" están actualizados :confused:

Tengo la impresión de que me he complicado en exceso la vida y que debe existir alguna forma más simple de hacerlo, por eso pido si alguien puede ayudarme o indicarme como podría hacerlo.

Saludos y gracias :)

marto
02-08-2004, 11:05:03
Wop!

Por lo que dices, parece que el error lo produce al hacer la última select, por eso ves los datos actualizados. De todas maneras, no veo nada raro en ella :(

A parte de eso, veo que estás creando una tabla "normal", eso te puede dat problemas en caso de concurrencia... yo usaría tablas temporales que solamente vea el usuario activo, con el operador @@ ;)

__marcsc
02-08-2004, 11:18:19
Una pregunta,

ahora no tengo la ayuda a mano y no me acuerdo muy bien, pero los operadores que denotan tablas temporales no son # y ##??

Saludos!

tgsistemas
02-08-2004, 11:23:25
Gracias por la respuesta tan rápida marto

Wop!
Por lo que dices, parece que el error lo produce al hacer la última select, por eso ves los datos actualizados. De todas maneras, no veo nada raro en ella :(

y por que produce ese error ? :confused:



A parte de eso, veo que estás creando una tabla "normal", eso te puede dat problemas en caso de concurrencia... yo usaría tablas temporales que solamente vea el usuario activo, con el operador @@ ;)
Habia pensado lo de las tablas temporales pero después he de generar un report con los datos obtenidos... es posible sobre una tabla temporal? :confused:

Saludos y gracias. :)

marto
02-08-2004, 11:24:08
los operadores que denotan tablas temporales no son # y ##??


Pues sí... me colé :o


¡¡¡Pero el 2 y el 3 están al lado!!!

marto
02-08-2004, 11:25:46
...es posible sobre una tabla temporal? :confused:


Pues yo tampoco tengo la documentación a mano.... pero si no recuerdo mal, la tabla está disponible hasta que se cierra la conexión.

tgsistemas
02-08-2004, 12:16:50
He modificado el proceso generando una tabla temporal, pero como puedo acceder a ella para consultar si los datos son correctos ? :confused:

No puedo hacer :

select * from #TEMPORAL

Me produce un error como si no existiera dicha tabla.

Saludos y gracias. :)

jachguate
02-08-2004, 17:52:53
Hilo movido al foro de SQL Server, por no corresponder con la temática del foro de SQL.

tgsistemas
03-08-2004, 11:11:21
He modificado el proceso generando una tabla temporal, pero como puedo acceder a ella para consultar si los datos son correctos ? :confused:
No puedo hacer :
select * from #TEMPORAL
Me produce un error como si no existiera dicha tabla.
Saludos y gracias. :)
El fallo era mio, en el servidor no habia dado acceso a la tabla "tempdb" al usuario que utilizo :eek:

He probado el procedimiento utilizando una tabla "normal" ejecutando los procesos independientemente y funciona perfectamente, pero si los integro todos en el mismo SP no devuelve ningún dato.
Es correcto el SP ?? :confused:

Saludos y gracias