私は多量のデータ行をあらかじめロードしているSQL Serverデータベースを持っています。SQL:SQL Serverで重複するレコードを削除する
残念ながら、データベースにプライマリキーがなく、テーブルに重複情報があります。私はプライマリキーがないことを心配していませんが、データベースに重複があることを心配しています...
何か考えていますか? (SQL Server newbであることを私に許してください)
私は多量のデータ行をあらかじめロードしているSQL Serverデータベースを持っています。SQL:SQL Serverで重複するレコードを削除する
残念ながら、データベースにプライマリキーがなく、テーブルに重複情報があります。私はプライマリキーがないことを心配していませんが、データベースに重複があることを心配しています...
何か考えていますか? (SQL Server newbであることを私に許してください)
これは、テーブルに主キーを持つ理由の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および上記のために。
これは私のためにそれを解決! – rockit
これを見てください。
「行うことは困難である何か。テーブルのすべての列間で複製されたデータを削除することは難しいことではありませんあなたはSQL Serverが独自のデータとみなしている間、あなたのビジネスルールに基づいて複製を検討したデータを削除することです」
http://www.sql-server-performance.com/articles/dba/delete_duplicates_p1.aspx
テーブルが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だけ重複行を選択できるようになります:
は、ここでそれを行う方法です。
この記事では、プライマリキーのないテーブルの場合、問題の解決に役立ちます。
あなたは重複をどのように判断しますか? –
http://www.lmgtfy.com/?q=Deleting+duplicate+records+in+SQL+Server –
使用しているSQL Serverのバージョンはどれですか? 2000年、2005年、2008年? – MaxiWheat