Este documento explica la manera de identificar registros duplicados y como eliminarlos.
Primero generaremos una tabla y le insertaremos registros.
CREATE TABLE [dbo].[Employee] (
[id] [int] NULL ,
[name] [Varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[salary] [Numeric](18, 2) NULL
) ON [PRIMARY]
GO
Insertamos unos registros en la tabla usando el script.
Insert into employee values (1,'Ram', 1000.00)
Insert into employee values (1,'Ram', 1000.00)
Insert into employee values (2,'Joe', 2000.00)
Insert into employee values (2,'Joe', 1000.00)
Insert into employee values (3,'Mary', 1000.00)
Insert into employee values (4,'Julie', 5000.00)
Insert into employee values (2,'Joe', 1000.00)
Insert into employee values (1,'Ram', 1000.00)
La tabla muestra los registros insertados en la tabla Employee
| id | Name | Salary |
| 1 | Ram | 1000
|
| 1 | Ram | 1000 |
| 2 | Joe | 2000 |
| 2 | Joe | 1000 |
| 3 | Mary | 1000 |
| 4 | Julie | 5000 |
| 2 | Joe | 1000 |
| 1 | Ram | 1000 |
Para identificar los los registros duplicados debemos de usar la sentencia group by, contando los registros que son mayores a 1.
Select count(*) as "Registros Iguales", id, name, salary
from employee (nolock)
group by id, name,salary having count(1)>1
Para eliminar podemos generar un script como el siguiente
Declare @id int, @name varchar (50), @cnt int, @salary numeric Declare registrosduplicados cursor local static For Select count(*) as "Registros Iguales", id, name, salary from employee (nolock) group by id, name,salary having count(*)>1 Open registrosduplicados Fetch next from registrosduplicados into @cnt,@id,@name,@salary While @@fetch_status=0 Begin Set @cnt= @cnt-1 Set rowcount @cnt -- Eliminando los registros duplicados Delete from employee where id=@id and name=@name and salary=@salary Set rowcount 0 Fetch next from registrosduplicados into @cnt,@id,@name,@salary End Close registrosduplicados Deallocate registrosduplicadosNote que existe una columna count, esta es utilizada para identificar cuales de ellos son registros duplicados
Después de ejecutar el script la información debe de quedar de la siguiente manera
| id | Name | Salary |
| 1
| Ram
| 1000
|
| 2
| Joe
| 1000
|
| 2
| Joe
| 2000
|
| 3
| Mary
| 1000
|
| 4
| Julie
| 5000
|
{jcomments on}