Está en la página 1de 3

CREATE PROCEDURE [dbo].

[Duplicados] AS --INICIALIZAMOS LA TRANSACCION BEGIN TRANSACTION

DECLARE @VALORDUPLICADO VARCHAR(20) DECLARE @NUMVECESDUPLICADO INT --Se declara el cursor principal que obtiene el valor --del campo duplicado y el numero de veces que se repite DECLARE CURSOR_DUPLICADOS CURSOR FOR

--usted debe reemplazar el nombre de la tabla y el nombre del --campo por el cual va a eliminar este ejemplo lo realize con la tabla GIFCONSUMO SELECT NumVecesDuplicado FROM GIFCONSUMO VEHPLACA AS ValorDuplicado, COUNT(1) AS

GROUP BY VEHPLACA HAVING (COUNT(1) > 1)

ORDER BY NumVecesDuplicado

--Recorre el cursor OPEN CURSOR_DUPLICADOS FETCH NEXT FROM CURSOR_DUPLICADOS INTO @VALORDUPLICADO,@NUMVECESDUPLICADO

WHILE @@FETCH_STATUS = 0

BEGIN --para controlar que no se borren todos los registros --y se mantenga un valor en la tabla DECLARE @CONTADOR INT SET @CONTADOR =1 -- el tipo de dato depende del valor definido para la tabla DECLARE @ID NUMERIC(18,0) --se elimina el registro(s) duplicados pero se deja uno solo. DECLARE CURSOR_BORRARDUPLICADOS CURSOR FOR --se consulta los id de los valores duplicados SELECT FROM CONID AS ID GIFCONSUMO

WHERE VEHPLACA = @VALORDUPLICADO --Recorre el cursor de boorado de registros OPEN CURSOR_BORRARDUPLICADOS FETCH NEXT FROM CURSOR_BORRARDUPLICADOS INTO @ID

WHILE @@FETCH_STATUS = 0 BEGIN --ELIMINAMOS LOS REGISTROS DUPLICADOS --MENOS EL ULTIMO REGISTRO IF(@CONTADOR < @NUMVECESDUPLICADO)

DELETE GIFCONSUMO WHERE CONID= @ID --aumentamos el contador para controloar no borrar --el ultimo registro SET @CONTADOR = @CONTADOR + 1 FETCH NEXT FROM CURSOR_BORRARDUPLICADOS INTO @ID END --cierro y libero el cursor interno CLOSE CURSOR_BORRARDUPLICADOS DEALLOCATE CURSOR_BORRARDUPLICADOS --cierro y libero el cursor principal FETCH NEXT FROM CURSOR_DUPLICADOS INTO @VALORDUPLICADO,@NUMVECESDUPLICADO END CLOSE CURSOR_DUPLICADOS DEALLOCATE CURSOR_DUPLICADOS --ingresa por este lado si ocurre error o al finalizar el proceso IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN -1 END COMMIT TRANSACTION

También podría gustarte