大量のデータ行をプリロードしたSQLサーバーデータベースがあります。
残念ながら、データベースには主キーがなく、テーブルに重複する情報があります。主キーがないことは心配していませんが、データベースに重複があることは心配しています...
何かご意見は?(SQLサーバーの初心者であることを許してください)
大量のデータ行をプリロードしたSQLサーバーデータベースがあります。
残念ながら、データベースには主キーがなく、テーブルに重複する情報があります。主キーがないことは心配していませんが、データベースに重複があることは心配しています...
何かご意見は?(SQLサーバーの初心者であることを許してください)
これが、テーブルに主キーが必要な理由の1つです。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;
そうすれば、明日もこれを行う必要がなくなり、翌日と翌日に、テーブルで主キーを宣言できます。
テーブルが 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 を使用すると、重複した行のみを選択できます。