Buen dia amigos,
Les traigo un script utilísimo si han tenido la mala suerte de, involuntariamente, duplicar, triplicar, cuadruplicar etc registros de una tabla...
Con la ayuda de mi script en unas pocas línes de código podrán volver la tabla a su estado anterior, es decir, podrá eliminar sólo los registros duplicados, conservando los registros válidos. Manos a la obra..
--------------------------------------------------------------
-- Detalle: Este script permite borrar registros duplicados --
-- Autor: Gustavo Herrera --
--------------------------------------------------------------
-- 1) Agrego un campo "id" identity (si no lo tiene)
Alter Table TablaX
add id integer identity
-- 2) Borro registros duplicados
Delete from TablaX
where Id > (Select min(Id) From TablaX as b Where TablaX.Idmsg = b.Idmsg)
-- 3) Dropeo el campo creado para correr el paso 2
Alter Table TablaX
Drop Column id
Mi nombre es Gustavo Herrera. Me desempeño profesionalmente como DBA especializado en Microsoft Sql Server, formo parte activamente de la Comunidad Sql Server de Argentina (comunidad oficial de Microsoft). La idea de este blog es generar un vínculo más de intercambio con uds., mis queridos colegas. Espero que se sientan a gusto, pasen, vean, opinen, comenten, critiquen, aporten.. este blog lo hacemos entre todos.
Buscar este blog
Suscribirse a:
Enviar comentarios (Atom)
Hola Gustavo!
ResponderEliminarQué es Idmsg?
Gracias!!
Es el id que identifica el producto, empleado, servicio de cada uno de los registros de tabla. GUSTAVO.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias... sirvío perfectamente para SQL Server 2000 ya que marcaba errores con Row_Number() débido a que esta función se implementó en SQL Server 2005...tambíen las comas me daba error ... y así es como me funciono:::
ResponderEliminarPrimer Paso Igual ...
Delete from historial
WHERE Id >
(SELECT MIN(Id)
FROM historial AS b
WHERE historial.claveU = b.claveU AND historial.claveS = b.claveS )
siguiente paso igual....
GRACIAS por compartir tu conocimiento.!!!! un abrazo
EXCELENTE DE VERDAD MUY SIMPLE Y EFECTIVO GRACIAS!!!!!!
ResponderEliminarGustavo! Muchas gracias, me has evitado unas cuantas horas de trabajo.
ResponderEliminarpero si en los registros duplicados tienes un valor que quieres que se agregen al campo original como le haces para que se sumen???
ResponderEliminarPerfectoo ... me salvo esto...
ResponderEliminarbuenisimoo me salvaste la vida xd
ResponderEliminarBravo! gracias maestro!
ResponderEliminarMuchas Gracias Gustavo por compartir este query.
ResponderEliminarMe ayudo mucho lo trabaje en una tabla de 293k registros y dio de baja 9.3k repetidos Suerte a Argentina en el Mundial de Brasil y ARRIBA los PUMAS!!
desde Mèxico Saludos.Gabriel Del Real Monterrey Mexico.
Gustavo, disculpa la molestia, pero en mi caso tengo una tabla con 2 columnas únicamente, por una migración errónea se duplicaron los registros, yo debería eliminar aquellas filas que sean exactamente iguales. Te paso el ejemplo de mi tabla:
ResponderEliminarsa_art1 sa_art2
MCR09-003 COS725
MCR09-003 MTA243
MCR09-003 VAL1469
MCR09-003 COS725
MCR09-003 MTA243
MCR09-003 VAL1469
En este caso debería borrar una de cada, para que queden 3 únicos registros. como seria el script. desde ya muchas gracias, y disculpa las molestias. Saludos.
Va la respuesta con el script
ResponderEliminar--1) AGREGAS UN CAMPO INCREMENTAL A TU TABLA
ALTER TABLE tabla
ADD Id_BORRADO INT IDENTITY (1,1)
-- 2) Borro registros duplicados
Delete from tabla
where Id_BORRADO > (Select min(Id_BORRADO) From tabla as b Where tabla.sa_art1 = b.sa_art1 and tabla.sa_art2 = b.sa_art2)
-- 3) Dropeo el campo creado para correr el paso 2
Alter Tabletabla
Drop Column Id_BORRADO
Muy buen query! Excelente solución!
ResponderEliminarLa letra b a que se refiere, disculpa..no lo entendi
ResponderEliminarTengo años que no trabajo con sql, hoy tuve la necesidad de hacer algo asi, ni me acordaba de los comandos de sql, pero tu ayuda fue excelente. muchas gracias.
ResponderEliminarInfracción de la restricción PRIMARY KEY 'XPKDistrito'. No se puede insertar una clave duplicada en el objeto 'dbo.Distrito'.
ResponderEliminarSe terminó la instrucción.
ME PODRIAN AYUDAR PORQ SALE ESTE ERROR
EliminarYo lo hago de esta manera:
ResponderEliminar1. Hago una copia de la tabla en una tabla temporal
create table #tablaAux(/*Todos los campos de tablaX*/)
insert into #tablaAux select * from tablaX
2. Vacío tablaX
truncate table tablaX
3. LLeno tablaX sin duplicados
insert into tablaX select distinct * from #tablaAux
4. Limpio tabla temporal
drop table #tablaAux
Por favor como realizo la consulta para borrar los registros repetidos
ResponderEliminarTextos completos ficha id_material cantidad observacion
Editar Borrar 1 1 12 NULL
Editar Borrar 2 2 1 NULL
Editar Borrar 12345 1 45
Editar Borrar 12344 2 55 bien
Editar Borrar 3333 1 4
Editar Borrar 12121 1 12
Editar Borrar 2333 1 3
Editar Borrar 45456 2 44
Editar Borrar 5678 1 12
Editar Borrar 5678 2 12 ok
Editar Borrar 55 1 55
Editar Borrar 12344444 2 2 Carta
Editar Borrar 12344444 1 5 Amarillo y Azul
Editar Borrar 12398 1 3
ficha id_material cantidad observacion
ResponderEliminar1 1 12 NULL
12344444 2 2 Carta
12344444 1 5 Amarillo y Azul
ficha id_material cantidad observacion
ResponderEliminar1 1 12 NULL
12344444 2 2 Carta
12344444 1 5 Amarillo y Azul
Por favor como realizo la consulta para borrar los registros repetidos
ResponderEliminarTextos completos ficha id_material cantidad observacion
Editar Borrar 1 1 12 NULL
Editar Borrar 2 2 1 NULL
Editar Borrar 12345 1 45
Editar Borrar 12344 2 55 bien
Editar Borrar 3333 1 4
Editar Borrar 12121 1 12
Editar Borrar 2333 1 3
Editar Borrar 45456 2 44
Editar Borrar 5678 1 12
Editar Borrar 5678 2 12 ok
Editar Borrar 55 1 55
Editar Borrar 12344444 2 2 Carta
Editar Borrar 12344444 1 5 Amarillo y Azul
Editar Borrar 12398 1 3
de la misma forma que lo hace aca, solo que en la condición tienes que comparar los campos que tomarás para evaluar si esta repetido o no un registro,en tu caso deberias comparar "textos completos,ficha,id_material,cantidad,observacion"
EliminarTengo yo una tabla en SQL Server la cual tiene dos llaves , como se podria aplicar la solucion para eliminar registros duplicados, gracias.. de antemano
ResponderEliminarTengo yo una tabla en SQL Server la cual tiene dos llaves , como se podria aplicar la solucion para eliminar registros duplicados, gracias.. de antemano
ResponderEliminar