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

error en procedimiento+

Estas en el tema de error en procedimiento+ en el foro de SQL Server en Foros del Web. Buenas tarde, tengo un procedimiento pero no funciona como yo quisiera, estoy tratando que haga un consulta y la envié a una tabla temporal y ...
  #1 (permalink)  
Antiguo 03/05/2010, 16:14
 
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 6 meses
Puntos: 0
error en procedimiento+

Buenas tarde, tengo un procedimiento pero no funciona como yo quisiera, estoy tratando que haga un consulta y la envié a una tabla temporal y me cree otra tabla que será donde dejaré los datos finales esto si lo hace,al recorrer mi primera tabla temporal este da un dato en el campo llamado "diferencia" que es la diferencia entre fechas y este valor al recorrer la primera tabla debe ir insertando en la segunda tabla los datos cambiando la fecha inicial donde agrega un dia con set @FECHAINICIO =Dateadd(day,@NUM,@fechaInicio) y la falla es que parece que no me recorre bien mi tabla y tampoco me está adicionando el dia, si me carga la segunda tabla pero con información del primer registro sin ninguna modificación pero parece ser que se pega el ciclo ya que tan solo tengo 10 registro en la primera tabla y la segunda tabla aunque carga mal está guardando 247456 registro y eso porque paré el procedimiento.

Agradecería me ayudaran a rev

Código:
CREATE PROCEDURE sp_PresenciasFijas

 AS

SET NOCOUNT ON

SELECT idPresenciaFija, Case datepart(mm,fechaInicio) When 1 then 'Enero' When 2 then 'Febrero' When 3 then 'Marzo' When 4 then 'Abril' When 5 then 'Mayo' When 6 then 'Junio' When 7 then 'Julio' When 8 then 'Agosto' When 9 then 'Septiembre' When 10 then 'Octubre' When 11 then 'Noviembre' When 12 then 'Diciembre' End as mes,month(fechaInicio)as mesN, year(fechaInicio) ano, 
day(fechaInicio) as diaI,day(fechaFin) as diaF, DateDiff(day,fechaInicio,fechaFin)diferencia, fechaInicio, fechaFin, Portal.nombrePortal, Portal.idPortal
into temppresenciasFijas
 FROM PresenciasFijas INNER join Portal ON Portal.idPortal = PresenciasFijas.idPortal 
--WHERE presenciasFijas.idPortal =1 order by month(fechaInicio)

CREATE TABLE tempPres (IDPRESENCIAFIJA INT,MES VARCHAR (50) ,MESN INT,ANO INT,DIAI INT ,DIAF INT,DIFERENCIA INT,FECHAINICIO DATETIME,FECHAFIN DATETIME,NOMBREPORTAL VARCHAR (150) ,IDPORTAL INT)


DECLARE
		@IDPRESENCIAFIJA INT,
		@MES VARCHAR(50) ,
		@MESN INT,
		@ANO INT,
		@DIAI INT ,
		@DIAF INT,
		@DIFERENCIA INT,
		@FECHAINICIO DATETIME,
		@FECHAFIN DATETIME,
		@NOMBREPORTAL VARCHAR(150) ,
		@IDPORTAL INT,
		@NUM INT
	
	
		--Se declara el cursor
	DECLARE CURSORUNI CURSOR FOR 
			SELECT IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL
			 FROM dbo. temppresenciasFijas

	OPEN CURSORUNI
	
	FETCH NEXT FROM CURSORUNI INTO @IDPRESENCIAFIJA, @MES, @MESN, @ANO, @DIAI, @DIAF, @DIFERENCIA, @FECHAINICIO,@FECHAFIN, @NOMBREPORTAL, @IDPORTAL
		
		
	--Se recorre el cursor
	WHILE (@@fetch_status <> -1)
	BEGIN

	

	IF(@DIFERENCIA=1)
BEGIN
SET @NUM =0
	
	INSERT INTO dbo.tempPres 
			( IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL) 
	VALUES 
			( @IDPRESENCIAFIJA,@MES,@MESN, @ANO, @DIAI, @DIAF, @DIFERENCIA, @FECHAINICIO,@FECHAFIN, @NOMBREPORTAL, @IDPORTAL) 
		END

ELSE
	BEGIN
	
	WHILE(@NUM=@DIFERENCIA)
	set @FECHAINICIO =Dateadd(day,@NUM,@fechaInicio) 
	BEGIN
	INSERT INTO dbo. tempPres 
			( IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL) 
	VALUES 
			( @IDPRESENCIAFIJA,@MES,@MESN, @ANO, @DIAI, @DIAF, @DIFERENCIA, @FECHAINICIO,@FECHAFIN, @NOMBREPORTAL, @IDPORTAL) 
	SET @NUM= @NUM+1
	END

END
		
	END




drop table tempPresenciasFijas
DROP TABLE tempPres 

SET NOCOUNT OFF
RETURN
GO
  #2 (permalink)  
Antiguo 03/05/2010, 17:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: error en procedimiento+

Si has leído los temas de CURSORES, no son recomendados por el grupo, ya que degradan la respuesta de tu servidor y podrían llegar a "tirarlo".

Explica que deseas hacer y codifiquemoslo con T-SQL
  #3 (permalink)  
Antiguo 04/05/2010, 07:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: error en procedimiento

Buenos días, tendré en cuenta lo del cursor porque realmente no lo aconsejan según lo que leí, lo he quitado pero ahora es peor, yo creo que no me está recorriendo el select. Les comentaré que quiero hacer, creo una tabla tempPresenciasFijas y en esta consulta cada registro me trae un campo "int" que se llama diferencia, esto esto es la diferencia entre dos rangos de fechas"fechainicial y fechaFinal" ya que necesito ver los registros con las fechas completas que están dentro de estos rangos.
Por eso al cargar mi segunda tabla toma el número diferencia y va cargando ese número de veces el mismo registro pero va adicionando un día a la fecha inicial.
Ejemplo:04/05/2010 - 08/05/2010 diferencia 4
primer registro: idpresencia mes year nombreportal fechainicio fechafin04/05/2010
1 5 2010 portal1 04/05/2010
1 5 2010 portal1 05/05/2010
1 5 2010 portal1 06/05/2010 ...... y sigue revisando los otros registros para hacer lo mismo.
Este son los cambios que hice, ya que tenía mal set @FECHAINICIO =Dateadd(day,@NUM,@fechaInicio)

Quité los cursores y ahora ya ni me carga la segunda tabla solo carga nulos. Agradezco la ayuda a todos.

Cita:
SELECT idPresenciaFija, Case datepart(mm,fechaInicio) When 1 then 'Enero' When 2 then 'Febrero' When 3 then 'Marzo' When 4 then 'Abril' When 5 then 'Mayo' When 6 then 'Junio' When 7 then 'Julio' When 8 then 'Agosto' When 9 then 'Septiembre' When 10 then 'Octubre' When 11 then 'Noviembre' When 12 then 'Diciembre' End as mes,month(fechaInicio)as mesN, year(fechaInicio) ano,
day(fechaInicio) as diaI,day(fechaFin) as diaF, DateDiff(day,fechaInicio,fechaFin)diferencia, fechaInicio, fechaFin, Portal.nombrePortal, Portal.idPortal
into temppresenciasFijas
FROM PresenciasFijas INNER join Portal ON Portal.idPortal = PresenciasFijas.idPortal

CREATE TABLE tempPres (IDPRESENCIAFIJA INT,MES VARCHAR (50) ,MESN INT,ANO INT,DIAI INT ,DIAF INT,DIFERENCIA INT,FECHAINICIO DATETIME,FECHAFIN DATETIME,NOMBREPORTAL VARCHAR (150) ,IDPORTAL INT)

DECLARE
@IDPRESENCIAFIJA INT,
@MES VARCHAR(50) ,
@MESN INT,
@ANO INT,
@DIAI INT ,
@DIAF INT,
@DIFERENCIA INT,
@FECHAINICIO DATETIME,
@FECHAFIN DATETIME,
@NOMBREPORTAL VARCHAR(150) ,
@IDPORTAL INT,
@NUM INT

SELECT IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL
FROM dbo. temppresenciasFijas
IF(@DIFERENCIA=1)
BEGIN
SET @NUM =0
INSERT INTO dbo.tempPres
( IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL)
VALUES
( @IDPRESENCIAFIJA,@MES,@MESN, @ANO, @DIAI, @DIAF, @DIFERENCIA, @FECHAINICIO,@FECHAFIN, @NOMBREPORTAL, @IDPORTAL)
END
ELSE
BEGIN
WHILE(@NUM=@DIFERENCIA)
BEGIN
set @FECHAINICIO =Dateadd(day,@NUM,@fechaInicio)
INSERT INTO dbo. tempPres
( IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL)
VALUES
( @IDPRESENCIAFIJA,@MES,@MESN, @ANO, @DIAI, @DIAF, @DIFERENCIA, @FECHAINICIO,@FECHAFIN, @NOMBREPORTAL, @IDPORTAL)
SET @NUM= @NUM+1
END
END
  #4 (permalink)  
Antiguo 04/05/2010, 08:30
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: error en procedimiento+

¿Para que haces este SELECT?

SELECT IDPRESENCIAFIJA, MES,MESN, ANO, DIAI, DIAF, DIFERENCIA, FECHAINICIO,FECHAFIN, NOMBREPORTAL, IDPORTAL
FROM dbo. temppresenciasFijas
  #5 (permalink)  
Antiguo 04/05/2010, 11:24
 
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: error en procedimiento

es que ese es el select que debe tomar para agregar el día a la fecha
  #6 (permalink)  
Antiguo 04/05/2010, 16:03
 
Fecha de Ingreso: octubre-2007
Mensajes: 38
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: error en procedimiento+

Gracias a todos, ya me funciona mi procedimiento aunque no puede quitarle los cursores porque ya no me recorrería el select.
  #7 (permalink)  
Antiguo 04/05/2010, 16:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: error en procedimiento+

yenda, muchas veces cuando vienen a pedir ayuda, deben de darnos la oportunidad de ayudarlos, si al final, van a hacer las cosas como ustedes dicen, ¿para que se toman la molestia de venir a dejar una posta?

Etiquetas: procedimiento
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 10:37.