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

Como crear un script recursivo

Estas en el tema de Como crear un script recursivo en el foro de SQL Server en Foros del Web. Hola a todos: Hace poco que he empezado con SQL Server y como es normal salen problemas por todos lados. Vereis tengo que crear un ...
  #1 (permalink)  
Antiguo 13/09/2007, 22:40
 
Fecha de Ingreso: abril-2006
Mensajes: 25
Antigüedad: 18 años
Puntos: 0
Pregunta Como crear un script recursivo

Hola a todos:

Hace poco que he empezado con SQL Server y como es normal salen problemas por todos lados. Vereis tengo que crear un script recursivo que busque dentro de una especifica tabla, por ejemplo:

tbl_procesos
  • id
  • nombre
  • tiempo
  • pid (id del padre)

La cuestion es que dado un id tengo que sacar todos sus "hijos", los hijos de los hijos, y asi sucesivamente hasta llegar al final del arbol. Hasta ahora he estado haciendo todo el trabajo a "mano" pero lleva demasiado tiempo.

¿Puede alguien ayudarme en esto? Gracias por adelantado.
  #2 (permalink)  
Antiguo 14/09/2007, 09:06
 
Fecha de Ingreso: septiembre-2007
Mensajes: 19
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Como crear un script recursivo

seguro que eso no puede hacerse con clausulas select debidamente anidadas?
  #3 (permalink)  
Antiguo 14/09/2007, 09:08
 
Fecha de Ingreso: abril-2006
Mensajes: 25
Antigüedad: 18 años
Puntos: 0
Re: Como crear un script recursivo

Estoy abierto a cualquier sugerencia. Si tienes alguna idea de como hacerlo, por favor compartela conmigo.
  #4 (permalink)  
Antiguo 14/09/2007, 09:57
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Como crear un script recursivo

No, no se podria hacer con un select anidado, a menos que sea un numero finito de niveles.

Yo lo haria con un ciclo, para ir obteniendo los hijos de los procesos que se encuentran en el nivel actual y asi continuar hasta que la consulta ya no produzca mas hijos.

Yo no haria un procedimiento recursivo.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 14/09/2007, 11:00
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
Re: Como crear un script recursivo

visceras

Te he enviado un ejemplo a tu correo de hotmail, tiene una gran limitante, el resultado lo maneja en un VARCHAR(8000).

Saludos
  #6 (permalink)  
Antiguo 14/09/2007, 11:58
 
Fecha de Ingreso: abril-2006
Mensajes: 25
Antigüedad: 18 años
Puntos: 0
Re: Como crear un script recursivo

Andres95: Me podrias pasar un ejemplo de como hacerlo? Gracias

iislas: Gracias, ahora mismo voy a mirar el correo.
  #7 (permalink)  
Antiguo 27/09/2007, 09:22
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Como crear un script recursivo

La manera recursiva de hacerlo es bastante más elegante que otras. Desafortunadamente en SQL Server 2000 solo tienes máximo hasta 32 niveles de recursividad, creo recordar que la 2005 cambia ese valor, pero eso es algo que tendrías que confirmar.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #8 (permalink)  
Antiguo 27/09/2007, 12:17
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Información Re: Como crear un script recursivo

Asi es, de hecho en 2005 se simplifica este tipo de tareas, con el uso de "Common Table Expressions (CTE)"

Consultas recursivas mediante expresiones de tabla comunes


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
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 17:42.