Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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