Sidebar

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 registrosduplicados

Note 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

idNameSalary
1

 

Ram

 

1000

 

2

 

Joe

 

1000

 

2

 

Joe

 

2000

 

3

 

Mary

 

1000

 

4

 

Julie

 

5000

 

 

{jcomments on}

Search

Tips BD