SQL Server 2008のデータベーステーブルの1つに新しい一意のインデックスを追加しようとしています。これは既存のテーブルであり、一意のインデックスが必要な列にはすでにいくつかの重複する値があります。
その列に一意のインデックスを設定できますか?もしそうなら、どのように?
SQL Server 2008のデータベーステーブルの1つに新しい一意のインデックスを追加しようとしています。これは既存のテーブルであり、一意のインデックスが必要な列にはすでにいくつかの重複する値があります。
その列に一意のインデックスを設定できますか?もしそうなら、どのように?
テーブルにすでに重複する値がある場合、その列の重複する値を含むレコードを削除しない限り、この列にUNIQUEインデックスを設定することはできません。これは、UNIQUEの定義に当てはまります。
まず、列の重複する値を削除する必要があります。次に、列に一意のインデックスを作成できます。id
したがって、テーブルに2つの列があると仮定しますcolumn1
。重複する値を削除するには、1つを選択する必要があります。これは、ランダムまたは任意の順序で行うことができます。したがって、次のようになります。
WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Id) Corr
FROM YourTable
)
DELETE FROM CTE
WHERE Corr > 1
CREATE UNIQUE INDEX I_Unique ON YourTable(Column1)
いいえ、名前が示すように、キーを示す一意のインデックスは一意である必要があります。だからあなたはできません
列にすでに重複する値がある場合は、代わりに一意の複合キーを作成することをお勧めします。
たとえば、このテーブルデザインでこの問題を処理するには、テーブルのCustomerID/ProductID列に一意の制約を作成する必要があります。
CustomerProducts(CustomerID、ProductID)に一意のインデックスcust_products_uniqueを作成します
そのため、本質的にフィールドの組み合わせにより、インデックスが一意になります。
よろしく
SQL Server 2008では当てはまらない可能性がありますが、Management Studioを使用して、2014などの新しいバージョンでこれを行うことができます。