2009-11-20 4 views
6

У меня есть база данных sql-сервера, которую я предварительно загрузил тонны строк данных.SQL: Удаление повторяющихся записей в SQL Server

К сожалению, первичный ключ не используется в базе данных, и теперь в таблице имеется дублирующаяся информация. Меня не беспокоит отсутствие первичного ключа, но меня беспокоит наличие дубликатов в базе данных ...

Любые мысли? (Простите, что я являюсь сервером sql newb)

+2

Ну, как вы определяете дубликат? –

+1

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

+0

Какую версию SQL Server вы используете? 2000, 2005, 2008? – MaxiWheat

ответ

13

Ну, это одна из причин, почему у вас должен быть первичный ключ на столе. Какая версия SQL Server? Для SQL Server 2005 и выше:

;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; 

Тогда, так что вам не придется делать это снова завтра, и на следующий день, и на следующий день после того, объявить первичный ключ таблицы.

+0

спасибо, это решило это для меня! – rockit

0

Взгляните на это.

«не трудно удалить данные, которые продублированы во всех столбцах таблицы. Что труднее сделать, чтобы удалить данные, которые вы считаете продублировать на основе бизнес-правил, в то время как SQL Server сочтет уникальные данные»

http://www.sql-server-performance.com/articles/dba/delete_duplicates_p1.aspx

0

Скажем, ваш стол уникален COL1 и COL2.
Вот способ сделать это:

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 

ROWID> 1 позволит вам выбрать только дублированные строки.

Смежные вопросы