6

大量のデータ行をプリロードしたSQLサーバーデータベースがあります。

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

何かご意見は?(SQLサーバーの初心者であることを許してください)

4

2 に答える 2

13

これが、テーブルに主キーが必要な理由の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;

そうすれば、明日もこれを行う必要がなくなり、翌日と翌日に、テーブルで主キーを宣言できます。

于 2009-11-20T19:04:22.720 に答える
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 を使用すると、重複した行のみを選択できます。

于 2009-11-20T19:08:38.513 に答える