2009-11-20 11 views
6

私は多量のデータ行をあらかじめロードしているSQL Serverデータベースを持っています。SQL:SQL Serverで重複するレコードを削除する

残念ながら、データベースにプライマリキーがなく、テーブルに重複情報があります。私はプライマリキーがないことを心配していませんが、データベースに重複があることを心配しています...

何か考えていますか? (SQL Server newbであることを私に許してください)

+2

あなたは重複をどのように判断しますか? –

+1

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

+0

使用しているSQL Serverのバージョンはどれですか? 2000年、2005年、2008年? – MaxiWheat

答えて

13

これは、テーブルに主キーを持つ理由の1つです。どのバージョンのSQL Server?その後

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

、あなたは明日、そして次の日、そしてその翌日、再びこれを実行する必要はありませんので、テーブルの主キーを宣言:SQL Server 2005および上記のために。

+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だけ重複行を選択できるようになります:
は、ここでそれを行う方法です。

0

この記事では、プライマリキーのないテーブルの場合、問題の解決に役立ちます。

関連する問題