2009-11-20 13 views
6

Tengo una base de datos de servidor sql, que precargué con una tonelada de filas de datos.SQL: eliminación de registros duplicados en SQL Server

Desafortunadamente, no hay una clave principal en la base de datos, y ahora hay información duplicada en la tabla. No me preocupa que no haya una clave principal, pero me preocupa que haya duplicados en la base de datos ...

¿Alguna idea? (Perdóneme por ser un servidor sql newb)

+2

Bueno, ¿cómo determina un duplicado? –

+1

http://www.lmgtfy.com/?q=Deleting+duplicate+records+in+SQL+Server –

+0

¿Qué versión de SQL Server está utilizando? 2000, 2005, 2008? – MaxiWheat

Respuesta

13

Bueno, este es un motivo por el que debería tener una clave principal sobre la mesa. ¿Qué versión de SQL Server? Para SQL Server 2005 y posteriores:

;WITH r AS 
(
    SELECT col1, col2, col3, -- whatever columns make a "unique" row 
    rn = ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY col1) 
    FROM dbo.SomeTable 
) 
DELETE r WHERE rn > 1; 

Entonces, por lo que no tiene que hacer esto de nuevo mañana, y al día siguiente, y el día después de eso, declaran una clave principal en la tabla.

+0

gracias, ¡esto lo resolvió para mí! – rockit

0

Digamos que su tabla es única para COL1 y COL2.
Aquí es una manera de hacerlo:

SELECT * 
FROM (SELECT COL1, COL2, ROW_NUMBER() OVER (PARTITION BY COL1, COL2 ORDER BY COL1, COL2 ASC) AS ROWID 
     FROM TABLE_NAME)T 
WHERE T.ROWID > 1 

El ROWID> 1 le permitirá seleccionar sólo las filas duplicadas.

Cuestiones relacionadas