1. ホーム
  2. sql-server-2005

[解決済み] 存在しない重複があるため、インデックスを作成できない?

2022-02-26 05:22:57

質問

以下のTransact-SQLコマンドを実行すると、エラーが発生します。

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)

というエラーが発生します。

Msg 1505, Level 16, State 1, Line 1 CREATE UNIQUE INDEX ステートメントを実行しました。 は、重複するキーがあったため終了しました。 オブジェクト名 dbo.DimMeasureTopic'とインデックス は 'IX_TopicShortName' という名前です。その 重複するキーの値は()です。

を実行すると SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName' または SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]') の場合、IX_TopicShortNameのインデックスは表示されません。つまり、重複はしていないようです。

別のデータベースにも同じスキーマがあり、そちらでは問題なくインデックスを作成することができます。なぜここで作成できないのか、何か思い当たることはありますか?

解決方法を教えてください。

インデックスがすでに存在するのではなく、そのインデックスに含まれる TopicShortName フィールドがあります。 エラーメッセージによると、重複している値は空文字列です(単に投稿のファセットかもしれませんね)。 このような重複があると UNIQUE インデックスを作成します。

クエリを実行して、重複していることを確認することができます。

SELECT
    TopicShortName,
    COUNT(*)
FROM
    DimMeasureTopic
GROUP BY
    TopicShortName
HAVING
    COUNT(*) > 1

おそらく、もう一方のデータベースではデータが異なっており、重複は存在しないものと思われます。