1
resposta

Delete apenas registro duplicado

Em cado de registros duplicados na base há alguma condição para excluir apenas um dos registros?

Ex. Criei o registro do Márcio e da Cláudia em duplicidade e gostaria de excluir apenas um deles, ou seja excluir o duplicado e manter o outro registro como único

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Bom dia Patricia.

Tem mais de uma maneira de resolver este caso.

Descrevi 2 exemplos, veja abaixo:

-- ********************************************************************* --
-- ****** SOLUÇÃO 1 **************************************************** --
-- ****** OBS: se houverem dependências vinculadas na tabela, esta solução 
--               pode não ser a adequada
-- ********************************************************************* --

-- tabela ANTES 
select * from #MinhaTabela

-- como todos os dados da linha estão idênticos, bastaria dar um distinct e jogar todos os dados numa temporaria
if object_id('tempdb..#minhaTemp') is not null drop table #minhaTemp
select  distinct MATRICULA, NOME, PERCENTUAL_COMISSAO into #minhaTemp from #MinhaTabela 

-- limpa todos os registros da tabela oficial
truncate table #MinhaTabela

-- re-insere os dados na tabela sem as duplicidades
insert into #MinhaTabela select * from #minhaTemp

-- tabela DEPOIS 
select * from #MinhaTabela

-- ********************************************************************* --
-- ****** SOLUÇÃO 2 **************************************************** --
-- ****** OBS: nesta solução só serão removidas duplicidades, sempre 
--               mantendo 1 dos registros únicos
-- ********************************************************************* --
-- tabela ANTES 
set rowcount 0
select * from #MinhaTabela

declare @MATRICULA int = 0
while (select TOP 1 QTD=count(1) from #MinhaTabela group by MATRICULA having count(1)>1)>0
begin
    set @MATRICULA = 0
    set @MATRICULA = (select top 1 MATRICULA from #MinhaTabela group by MATRICULA having count(1)>1)

    set rowcount 1
    delete from #MinhaTabela where MATRICULA = @MATRICULA
end

-- tabela DEPOIS  
set rowcount 0
select * from #MinhaTabela