Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2004
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Los SP y yo ....

Hola a todos/as de nuevo :

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

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 :
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 :
Código:
Error al crear el cursor
pero si compruebo los datos de la tabla "temporal" están actualizados

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
__________________
Toni | blog
Responder Con Cita
  #2  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
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 @@
__________________
E pur si muove
Responder Con Cita
  #3  
Antiguo 02-08-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!
Responder Con Cita
  #4  
Antiguo 02-08-2004
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Gracias por la respuesta tan rápida marto

Cita:
Empezado por 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 ?


Cita:
Empezado por marto
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?

Saludos y gracias.
__________________
Toni | blog
Responder Con Cita
  #5  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por marcsc
los operadores que denotan tablas temporales no son # y ##??
Pues sí... me colé

Cita:
Empezado por Abogado defensor de Marto
¡¡¡Pero el 2 y el 3 están al lado!!!
__________________
E pur si muove
Responder Con Cita
  #6  
Antiguo 02-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por tgsistemas
...es posible sobre una tabla temporal?
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.
__________________
E pur si muove
Responder Con Cita
  #7  
Antiguo 02-08-2004
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
He modificado el proceso generando una tabla temporal, pero como puedo acceder a ella para consultar si los datos son correctos ?

No puedo hacer :

Código:
select * from #TEMPORAL
Me produce un error como si no existiera dicha tabla.

Saludos y gracias.
__________________
Toni | blog
Responder Con Cita
  #8  
Antiguo 02-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hilo movido al foro de SQL Server, por no corresponder con la temática del foro de SQL.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 03-08-2004
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Cita:
Empezado por tgsistemas
He modificado el proceso generando una tabla temporal, pero como puedo acceder a ella para consultar si los datos son correctos ?
No puedo hacer :
Código:
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

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 ??

Saludos y gracias
__________________
Toni | blog
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:26:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi