54

运行以下 Transact-SQL 命令时出现错误:

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)

错误是:

消息 1505,级别 16,状态 1,第 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 索引不显示时。所以似乎没有重复。

我在另一个数据库中有相同的架构,并且可以在那里创建索引而不会出现问题。任何想法为什么它不会在这里创建?

4

5 回答 5

106

不是索引已经存在,而是TopicShortName表本身的字段存在重复值。根据错误消息,重复值是一个空字符串(我猜它可能只是发布的一个方面)。这种重复会阻止UNIQUE索引的创建。

您可以运行查询以确认您有重复:

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

大概在另一个数据库中,数据不同,并且不存在重复项。

于 2010-02-01T23:31:26.337 回答
16

重复项在您的数据中,请尝试运行此查询以找到它。

SELECT TopicShortName, COUNT(*)
FROM DimMeasureTopic
GROUP BY TopicShortName
HAVING COUNT(*) > 1
于 2010-02-01T23:32:03.927 回答
6

这是因为您在表中已经有不唯一的记录(根据它的声音,TopicShortName 字段中有 2 条记录具有空白值)。

所以,这与数据有关,而不是索引本身。

于 2010-02-01T23:33:22.380 回答
4

If you are using code-based migrations, and you rename a property of an entity and you are having an unique index for the property, entity framework will create a new column and trying to add an unique index for the new column but the new column has all null values, therefore it will fail. You need to manually modify the migration code to copy the data from old column before the line to create index.

于 2015-10-30T19:10:43.853 回答
0

It should have specified the duplicate key value in the error message. "The duplicate key value is (' ', ' ', ' ') The statement has been terminated. You have duplicate values that need to be addressed.

于 2019-06-19T17:30:35.640 回答