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

recorrer tabla con while/for/fetch o algo

Estas en el tema de recorrer tabla con while/for/fetch o algo en el foro de SQL Server en Foros del Web. Buenas gente, primero agradezco su ayuda. Para empezar no soy programador pero me defiendo bastante. En este caso, tengo un tabla que se llama ProximoService ...
  #1 (permalink)  
Antiguo 05/06/2015, 07:49
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
recorrer tabla con while/for/fetch o algo

Buenas gente, primero agradezco su ayuda.
Para empezar no soy programador pero me defiendo bastante.

En este caso, tengo un tabla que se llama ProximoService
la tabla esta compuesta por una serie de campos, entre ellos UnidadEntregadaID que es un valor numerico unico, que no se repite, y otro campo que se llama FechaService

lo que necesito hacer y no se como, es, si la fecha del sistema (getDate) es igual a FechaService

que estos pueden ser mas de 1 registro al mismo tiempo

recorrerlos, tomar el resto de los datos de cada una de las filas donde hay coincidencia y realizar una accion distinta para cada una de esas filas que encuentra



no tengo la mas minima idea de como hacerlo, estoy googleando hace 2 dias y probando while y fetch pero no llego a lo que necesito.


Me pueden dar una mano, mil gracias.


saludos.
  #2 (permalink)  
Antiguo 05/06/2015, 10:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: recorrer tabla con while/for/fetch o algo

Cita:
Para empezar no soy programador pero me defiendo bastante.
Ok. La pregunta es: ¿Quieres una solución posible para hacer un stored procedure en T-SQL, o quieres hacerlo en un lenguaje de programación?
Lo primer es tema de este foro, pero lo segundo es para los subforos de cada lenguaje, y en ese caso te muevo el post a ese subforo para que te respondan sobre ese tema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/06/2015, 14:05
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

lo quiero hacer con Tsql, como tengo una version express lo voy a ejecutar con xp_cmdshell
  #4 (permalink)  
Antiguo 05/06/2015, 14:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

xp_cmdshell?? como para que?? podrias dar un ejemplo de tus datos y lo que quieres obtener????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/06/2015, 19:57
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: recorrer tabla con while/for/fetch o algo

Siento decepcionarte, pero en la versión Express, no existe XP_CMDSHELL, además de que no es nada recomendable utilizar una tabla para ser recorrida registro a registro.
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 08/06/2015, 06:01
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

no importa el porque o como lo voy a usar, quiero una solucion que me sirva para recorrer la tabla y cambiar datos de la tabla, doy un ejemplo

id Nombre fechaService
1 pepe 10-06-2015
2 carlos 10-06-2015
3 Juan 13-07-2015
4 Nicolas 17-08-2015


Necesito, con una iteracion

recorrer los datos de esta tabla
preguntar si la fechaservice es igual a la fecha del sistema

mandar un mail al destinatario que yo quiera con la siguiente instruccion

Código SQL:
Ver original
  1. EXEC msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
  2.  
  3.         @recipients = "[email protected]",
  4.         @subject = "Fecha service",
  5.         @body = @Mensaje

luego de enviar el correo necesito hacer que fechaservice se actualize sumandole 150 dias mas
Código SQL:
Ver original
  1. UPDATE DateAdd(DAY,150,@fechaService)


como lo puedo hacer??
es para una tarea programada de windows que se va a ejecutar todos los dias.


muchas gracias.

Última edición por gnzsoloyo; 08/06/2015 a las 06:15
  #7 (permalink)  
Antiguo 08/06/2015, 07:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

y para que recorrer la tabla??? en el ejemplo que mencionas lo que quieres lograr se obtiene con un simple select


Código SQL:
Ver original
  1. DECLARE @nombre VARCHAR(MAX)
  2. DECLARE @id INT
  3. DECLARE @fecha datetime
  4. SET @fecha=getdate()
  5. SELECT @nombre=nombre,@id=id FROM tabla WHERE fecha=@fecha
  6.  
  7. EXEC msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
  8.  
  9.         @recipients = @nombre,
  10.         @subject = "Fecha service",
  11.         @body = @Mensaje
  12.  
  13. UPDATE TABLE
  14. SET fecha=DateAdd(DAY,150,fecha)
  15. WHERE id=@id

para que recorrer toda la tabla renglon por renglon????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 08/06/2015, 08:21
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

La idea de recorrer la tabla es porque voy a tener mas de 1 registro en el que la fechaservice va a ser igual a la fecha del sistema, voy a probar tu codigo a ver si me sirve, por eso pensaba en recorrer la tabla, es una tabla que va a tener entre 400 y 700 datos y va a haber unas 5/10 coinicidencias por dia.

Lo pruebo y te aviso, muchas gracias.
  #9 (permalink)  
Antiguo 08/06/2015, 08:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

pero para que recorrer toda la tabla si solo vas a tener 4 o 5 coincidencias, por eso mejor hacerlo asi ;)


Código SQL:
Ver original
  1. DECLARE @nombre VARCHAR(MAX)
  2. DECLARE @id INT
  3. DECLARE @fecha datetime
  4. DECLARE @x INT
  5. SET @fecha=getdate()
  6. SET @x=1
  7. SELECT *, IDENTITY(INT,1,1) AS rn INTO #temp FROM tabla WHERE fecha=@fecha
  8.  
  9. while @x<=(SELECT COUNT(*) FROM #temp)
  10. BEGIN
  11.  
  12. SELECT @nombre=nombre,@id=id FROM #temp WHERE rn=@x
  13.  
  14. EXEC msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
  15.  
  16.         @recipients = @nombre,
  17.         @subject = "Fecha service",
  18.         @body = @Mensaje
  19.  
  20. UPDATE TABLE
  21. SET fecha=DateAdd(DAY,150,fecha)
  22. WHERE id=@id
  23.  
  24. SET @x=@x+1
  25. END
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 08/06/2015, 08:39
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

buenisimo, muchisimas gracias LIBRAS!! sos un capo/a, te lo re super agradezco!!
  #11 (permalink)  
Antiguo 08/06/2015, 10:44
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: recorrer tabla con while/for/fetch o algo

LIBRAS: Porque lo quiere hacer, así de simple.
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 08/06/2015, 10:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

Cita:
Iniciado por iislas Ver Mensaje
LIBRAS: Porque lo quiere hacer, así de simple.
buen punto
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 08/06/2015, 11:51
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

Libras!!! me esta arrojando el siguiente error tu codigo, por lo que veo es un problema con la tabla temporal que estas armando, te paso mi codigo y el error, a ver si me puedes ayudar.


declare @nombre varchar(max)
declare @id int
declare @fecha date
declare @x int
Declare @Mensaje varchar(max)
set @fecha = CONVERT(char(10),getdate(),126)
set @x=1
select *, IDENTITY(INT,1,1) AS rn INTO #temp from ProximoService where FechaService=@fecha

while @x <= (select COUNT(*) from #temp)
begin
select @nombre=Cliente,@id=UnidadEntregadaID from #temp where rn=@x
Select @Mensaje = 'Proximo Service: ' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
'Cliente: ' + @nombre + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
'ID Entregada: ' + @id
Exec msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
@recipients = "[email protected]",
@subject = "Fecha Service",
@body = @Mensaje

Update ProximoService
Set FechaService=DATEADD(DAY,10,FechaService)
where UnidadEntregadaID=@id


set @x=@x+1
end



y el error es el siguiente
Msg 2714, Level 16, State 6, Line 8
There is already an object named '#temp' in the database
  #14 (permalink)  
Antiguo 08/06/2015, 12:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

un pequeño error, cuando creas una tabla temporal esta queda en "memoria" hasta que se cierra la sesion que la invoco, por lo que si quieres correr de nuevo tu codigo tienes que dropear la tabla en cuestion, para evitar eso puedes dejar tu codigo asi:

Código SQL:
Ver original
  1. DECLARE @nombre VARCHAR(MAX)
  2. DECLARE @id INT
  3. DECLARE @fecha DATE
  4. DECLARE @x INT
  5. DECLARE @Mensaje VARCHAR(MAX)
  6. SET @fecha = CONVERT(CHAR(10),getdate(),126)
  7. SET @x=1
  8.  
  9. IF OBJECT_ID('tempdb..#temp') IS NOT NULL
  10.     DROP TABLE #temp
  11.  
  12. SELECT *, IDENTITY(INT,1,1) AS rn INTO #temp FROM ProximoService WHERE FechaService=@fecha
  13.  
  14. while @x <= (SELECT COUNT(*) FROM #temp)
  15. BEGIN
  16. SELECT @nombre=Cliente,@id=UnidadEntregadaID FROM #temp WHERE rn=@x
  17. SELECT @Mensaje = 'Proximo Service: ' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
  18. 'Cliente: ' + @nombre + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
  19. 'ID Entregada: ' + @id
  20. EXEC msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
  21. @recipients = "[email protected]",
  22. @subject = "Fecha Service",
  23. @body = @Mensaje
  24.  
  25. UPDATE ProximoService
  26. SET FechaService=DATEADD(DAY,10,FechaService)
  27. WHERE UnidadEntregadaID=@id
  28.  
  29.  
  30. SET @x=@x+1
  31. END
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 08/06/2015, 12:46
 
Fecha de Ingreso: marzo-2014
Mensajes: 25
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: recorrer tabla con while/for/fetch o algo

LIBRAS!!!!!!!!

eres un DIOS!!!
si te tuviera cerca de daria un abrazo eterno y un pico!!!

andubo de 10!!!!

es excelente el codigo!
  #16 (permalink)  
Antiguo 08/06/2015, 13:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

Cita:
Iniciado por charly_oso Ver Mensaje
LIBRAS!!!!!!!!

eres un DIOS!!!
si te tuviera cerca de daria un abrazo eterno y un pico!!!

andubo de 10!!!!

es excelente el codigo!
Este....mejor nada mas me quedo con las gracias, olvida el pico jajajajajajaja
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 09/06/2015, 09:34
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: recorrer tabla con while/for/fetch o algo

Un pico de OSO !!, ja
__________________
MCTS Isaias Islas
  #18 (permalink)  
Antiguo 09/06/2015, 11:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: recorrer tabla con while/for/fetch o algo

Cita:
Iniciado por iislas Ver Mensaje
Un pico de OSO !!, ja
jajajajajajajaja si si pero NOOOOOOOOOOOOOOOOOOO
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: campos, 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 00:29.