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

problemas con datos devueltos por el cursor

Estas en el tema de problemas con datos devueltos por el cursor en el foro de SQL Server en Foros del Web. Buenas, tengo un problema con un cursor ya que me en el analizador de consultas me devuelve 2 registros en asp solo muestra uno, el ...
  #1 (permalink)  
Antiguo 07/07/2009, 15:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 51
Antigüedad: 15 años, 6 meses
Puntos: 0
problemas con datos devueltos por el cursor

Buenas, tengo un problema con un cursor ya que me en el analizador de consultas me devuelve 2 registros en asp solo muestra uno,

el esquema es el siguiente.

Son registros de equipos que se almacena su numero de serie y otros datos relevantes de la maquina y tengo otra tabla que tiene el usuario el cual es propiestario de la maquina , esta tabla guarda el usuario, el numero de serie, estado fecha etc.

Entonces hice un cursor para traer los datos, ya que, la unica union entre las 2 tablas es su numero de serie necesito obtener las maquinas q ese usuario tiene a su nombre y traer los datos de cada equipo (no del usuario).

este cursor recibe como dato el numero de serie de la maquina enviada a consultar.

este es el cursor.

Código:
    DECLARE @REFERENCIA as int
    
    DECLARE REFERENCIA CURSOR FAST_FORWARD
    FOR
        SELECT    numSerieInterno
        FROM        equiposDerivar
        WHERE    usuarioActual = (SELECT top 1 usuarioActual FROM equiposDerivar WHERE numSerieInterno = @numSerieInterno AND ESTADO ='ASIGNADO' ORDER BY idDerivar DESC)
                AND numSerieInterno <>@numSerieInterno
        ORDER BY     idDerivar ASC
    
    OPEN REFERENCIA

    FETCH NEXT FROM  REFERENCIA
    INTO @REFERENCIA
        WHILE (@@FETCH_STATUS = 0)
        BEGIN
    
            SELECT    equipos.numSerie,equipos.numSerieInterno,equipos.fechaIngreso,equipos.horaIngreso,equipos.usuario,equipos.modelo,equipos.obs,
                     Intranet.dbo.logueo.Nombre as UsuarioNombre, Intranet.dbo.logueo.Apellido as UsuarioApellido, Intranet.dbo.logueo.dir as Usuariodir, Intranet.dbo.logueo.depto as Usuariodepto,
                     intranet.dbo.marca.nombre as nombreMarca,tipo.Tipo as nombreTipos
            FROM        equipos
                    Left Outer Join Intranet.dbo.logueo on Intranet.dbo.logueo.iid = equipos.usuario
                    Left Outer Join  intranet.dbo.marca on intranet.dbo.marca.id = equipos.marca
                    Left Outer Join  tipo on tipo.idTipo = equipos.tipo
            WHERE    numSerieInterno = @REFERENCIA
    
    FETCH NEXT FROM REFERENCIA
    INTO @REFERENCIA
    END
    
    CLOSE REFERENCIA
    DEALLOCATE REFERENCIA

Saludos.
  #2 (permalink)  
Antiguo 07/07/2009, 20:43
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: problemas con datos devueltos por el cursor

Cada que haces un SELECT es un nuevo RECORDSET para tu front, deberias de rediseñar tu query, ya que lo que estas haciendo con cursores, se puede hacer un simple T-SQL
  #3 (permalink)  
Antiguo 08/07/2009, 07:18
 
Fecha de Ingreso: octubre-2008
Mensajes: 51
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: problemas con datos devueltos por el cursor

En este caso no he podido encotnrar una opcion diferente ya que el primer select del cursor obtiene los numeros de serie de los equipos asignados que puede ser mas de uno y despues hace un ciclo por cada numero de serie me trae todos los datos del equipos.
  #4 (permalink)  
Antiguo 08/07/2009, 21:05
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: problemas con datos devueltos por el cursor

¿Y si lo intentas asi?

SELECT equipos.numSerie,equipos.numSerieInterno,equipos.f echaIngreso,equipos.horaIngreso,equipos.usuario,eq uipos.modelo,equipos.obs,
Intranet.dbo.logueo.Nombre as UsuarioNombre, Intranet.dbo.logueo.Apellido as UsuarioApellido, Intranet.dbo.logueo.dir as Usuariodir, Intranet.dbo.logueo.depto as Usuariodepto,
intranet.dbo.marca.nombre as nombreMarca,tipo.Tipo as nombreTipos
FROM equipos
Left Outer Join Intranet.dbo.logueo on Intranet.dbo.logueo.iid = equipos.usuario
Left Outer Join intranet.dbo.marca on intranet.dbo.marca.id = equipos.marca
Left Outer Join tipo on tipo.idTipo = equipos.tipo
WHERE numSerieInterno IN( SELECT numSerieInterno
FROM equiposDerivar
WHERE usuarioActual = (SELECT usuarioActual FROM equiposDerivar WHERE numSerieInterno = @numSerieInterno AND ESTADO ='ASIGNADO' ORDER BY idDerivar DESC)
AND numSerieInterno <>@numSerieInterno)
  #5 (permalink)  
Antiguo 09/07/2009, 09:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 51
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: problemas con datos devueltos por el cursor

gracias es lo q necesitaba me funciono bien y le hice algunos cambios,
no recordaba el IN , lo use hace mucho
gracias.^^
  #6 (permalink)  
Antiguo 09/07/2009, 09:43
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: problemas con datos devueltos por el cursor

porque in y no utilizar mejor Exists
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #7 (permalink)  
Antiguo 09/07/2009, 10:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 51
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: problemas con datos devueltos por el cursor

los datos existen necesito solo unirlos para traer los correspondientes
y pk exists?
  #8 (permalink)  
Antiguo 09/07/2009, 11:03
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: problemas con datos devueltos por el cursor

Primero supongamos siempre que in debe ser usado para un conjunto de datos pequeños o un subquery pequeño

ejm:

Select t1.* from t1 where t1.campo in ('a','b','c') -- esto es correcto

Select t1.* from t1 where t1.campo in (select campo from t2) -- esto es correcto

Select t1.* from t1 where t1.campo not in (select campo from t2) -- esto tambien es correcto pero si existe un valor nulo en el campo de la tabla 2 entonces la consulta no te va a devolver ningun dato ya que toma el nulo como un campo que no esta incluido en la tabla o no existe

Ahora con Exists

Select t1.* from t1 where exists(select campo from t2) -- esto es correcto y mas rapido si supongamos la tabla 2 tenga una cantidad de datos inmensa

Select t1.* from t1 where not exists (select campo from t2) -- esto es correcto y en caso que haiga un valor nulo no lo toma en cuenta y sigue verificando algo que el in no lo hace

Tener cuidado siempre al utilizar el in no digo que necesariamente debes usar exists pero siempre saber en donde y cuando es accedible utilizar in o exists
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #9 (permalink)  
Antiguo 09/07/2009, 19:28
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: problemas con datos devueltos por el cursor

Cierto, cierto, cierto...........

select t1.*
from Cliente t1 where exists(select * from Ventas t2 WHERE t1.id = t2.id)

Sera mucho mas rapido
  #10 (permalink)  
Antiguo 10/07/2009, 06:55
 
Fecha de Ingreso: octubre-2008
Mensajes: 51
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: problemas con datos devueltos por el cursor

Probare tu ejempoo y comentare en un rato mas , sin embargo, el campo consultado nunca es nulo , ya que, es obligatoria.

Lo tomare en cuenta para consultas con valores nulos, ademas lo pruebo ahora

saludos.
Gracias .
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 07:35.