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 22-03-2005
dunia_lv dunia_lv is offline
Miembro
 
Registrado: feb 2005
Posts: 60
Poder: 20
dunia_lv Va por buen camino
Thumbs down Trabajo con cursores...

Hola a todos:

Mi problemas es el siguiente. Necesito hacer algunas consultas dependientes, es decir, yo quiero que dado el IdModRpt, me devuelva todas los IdArea que están asociados a él, luego dada cada una de esos IdArea quiero que me devuelva todos los IdUC que tienen esa area y que dada también las mismas IdArea me devuelva todos los IdFam que los contienen y luego recorrer cada una de las familias. Bien eso sé que puedo hacerlo de forma separado y recorre cada consulta hasta llegar al resultado final, pero me han dicho que lo mejor sería trabajar con cursores algo que nunca he hecho y aunque he tratado de realizarlo yo sola no me sale de ninguna manera...que me dicen ustedes?

la configuración de las tablas es esta

tabla 1

IdModRpt
IdArea

tabla 2

IdArea
IdFam


Tabla 3

IdArea
IdUC

saludos

Dunia
Responder Con Cita
  #2  
Antiguo 12-05-2006
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
los cursores permiten trabajar fila x fila en una fuente de registros
Código SQL [-]
--primero hay que declarar los cursores 
DECLARE cur_Tabla1 CURSOR FOR 
   SELECT  IdModRpt, IdArea FROM tabla1;  
--luego las variables para almacenar los valores le pones cualquier nombre 
DECLARE @t1IdModRPT INT, @t1IdArea INT; 
DECLARE @t2IdArea INT, @t2IdFam INT;  
--ahora abrir los cursores OPEN cur_tabla1; 
--ahora hacer un fetch para volcar los valores del registro en las variables 
FETCH NEXT FROM cur_Tabla1 INTO @t1IdModRPT, @t1IdArea; 
--vemos si pudo recuperar o botó un error 
WHILE @@FETCH_STATUS=0 
BEGIN   
  DECLARE cur_Tabla2 CURSOR FOR       
     SELECT  IdArea, IdFam FROM tabla2 WHERE idArea=@idArea;   
  OPEN cur_tabla2; 
LOOP_FETCH:   
  FETCH NEXT FROM cur_Tabla2 INTO @t2IdArea, @t2IdFam;
      SELECT * FROM tabla3 
       WHERE idArea=@t2IdArea;   
  IF @@fetch_status=0 GOTO LOOP_FETCH;   
  CLOSE cur_tabla2;   
  DEALLOCATE cur_tabla2; 
END; 
close cur_tabla1; 
deallocate cur_tabla1;


pero los cursores son costosos en memoria personalmente creo que es mejor usar selects o tablas temporales
ojala os sirva
__________________
self.free;
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 09:23:37.


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