none
Comparar registros con un cursor RRS feed

  • Pregunta

  • Hola!!!

    Me piden que recorra una tabla con un cursor si o si y no se como hacerlo. El problema es asi: tengo que recorrer una misma tabla y comparar sus registros para informar en otra tabla si los registros son iguales o cambio alguno de sus campos.

    Toda ayuda es bienvenida, muchas gracias!!

    viernes, 12 de julio de 2013 20:57

Respuestas

Todas las respuestas

  • Un ejemplo parecido al tuyo, espero y te ayude

    -- Declaración del cursor
    	DECLARE cCursor CURSOR FOR
    	SELECT t1.campo1,t1.campo2,t2.campo1,t2.campo2
            FROM tabla1 t1,tabla2
    	
    	-- Apertura del cursor
    	OPEN cCursor
    
            -- Variable para controlar si son diferentes
            DECLARE @diferentes INT
            SET @diferentes=0
    
    	-- Lectura de la primera fila del cursor
    	FETCH cCursor INTO @campo1_Tabla1,@campo2_Tabla1,campo1_Tabla2,campo2_Tabla2
    
    	WHILE (@@FETCH_STATUS = 0 )
    		BEGIN
    
    		CASE WHEN ((@campo1_Tabla1 <> @campo1_Tabla2) OR (@campo2_Tabla1 <> @campo2_Tabla2)) 
                    THEN
                    BEGIN
                    SET @diferentes= @diferentes + 1
                    END
    
    		-- Lectura de la siguiente fila del cursor
    	FETCH cCursor INTO @campo1_Tabla1,@campo2_Tabla1,campo1_Tabla2,campo2_Tabla2
    
    	END
    
    	-- Cierre del cursor
    	CLOSE cCursor
    
    	-- Liberar los recursos
    	DEALLOCATE cCursor
    	
            -- Seleccionamos la variable diferentes, y si es mayor a 0, es porque los campos de las tablas son diferentes
            SELECT @diferentes
    

    viernes, 12 de julio de 2013 21:15
  • Sinceramente usar cursores y en especial para ese tipo de consultas es una pésima idea, deberias proponer el uso de otro tipo de opciones, no me queda del todo claro si lo que requieres es encontrar filas duplicadas en tu tabla de trabajo o comparar registros de tu tabla A con otros contenidos en la tabla B, porque en dependencia de tu escenario puedes usar desde MERGE (http://msdn.microsoft.com/es-es/library/bb510625.aspx) hasta CTE (Common Table Expression: http://blogs.msdn.com/b/warnov/archive/2010/12/12/cte-common-table-expressions-sql-server-2008.aspx) para encontrar duplicados.

    En ambos casos lo idóneo es que postees la estructura de las tablas y alguna data de ejemplo para que sea mas sencillo ayudarte.


    "How many years can some people exist before they're allowed to be free" Bob Dylan Email: info@geohernandez.com Blog: geeks.ms/blogs/ghernandez

    sábado, 13 de julio de 2013 16:20
  • si, me habian contado eso de que los cursores no son los ideales pero me piden que lo haga asi. Gracias de todos modos por la sugerencia.
    martes, 16 de julio de 2013 15:40