segunda-feira, 31 de março de 2014

Eliminar duplicados numa tabela SQL

Nos ultimos tempos tenho-me deparado com desafios cada vez mais interessantes e incomuns.

Desta feita, precisei de localizar e eliminar de forma eficiente registos duplicados numa tabela, onde não existia um campo identificador unico nem um autonumber, ou outro que me permitisse isolar duplicados e eliminar apenas os duplicados, deixando um registo e não as várias duplicações do mesmo.

Aqui fica o script feito para resolver esta questão, na esperança que seja útil para mais alguém! Porque cooperar é mais produtivo que competir.


 USE BD  
 GO  
 -- ADICIONA UM CAMPO ID AUTONUMER  
 ALTER TABLE dbo.tabela  
   ADD ID INT IDENTITY  
 GO  
 -- SELECT  
 SELECT *  
 FROM tabela  
 GO  
 -- DETECTA DUPLICADOS  
 SELECT campo, COUNT(*) TotalCount  
 FROM tabela  
 GROUP BY campo  
 HAVING COUNT(*) > 1  
 ORDER BY COUNT(*) DESC  
 GO  
 -- ELEMINA DUPS  
 DELETE  
 FROM tabela  
 WHERE ID NOT IN  
 (  
 SELECT MAX(ID)  
 FROM tabela  
 GROUP BY campo)  
 GO  
 -- SELECT DE CONFIRMAÇÃO  
 SELECT *  
 FROM tabela  
 GO  
 -- REMOVE INDEX CRIADO PARA REMOVER DUPLICADOS  
 ALTER TABLE tabela  
 DROP COLUMN ID  
 GO  

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.