Pergunta

Estou recebendo um erro executando o seguinte comando transact-sql:

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)

O erro é:

MSG 1505, Nível 16, Estado 1, linha 1 A instrução CREATE INDEX ENCILADO ENCERRADA porque uma chave duplicada foi encontrada para o nome do objeto 'dbo.dimeasuretopic' e o nome do índice 'ix_topicshortname'. O valor da chave duplicado é ().

Quando eu corro SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName' ou SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]') O índice ix_topicshortname não é exibido. Portanto, não parece haver uma duplicata.

Eu tenho o mesmo esquema em outro banco de dados e posso criar o índice sem problemas lá. Alguma idéia de por que não criará aqui?

Foi útil?

Solução

Não é que o índice já exista, mas que existem valores duplicados do TopicShortName campo na própria tabela. De acordo com a mensagem de erro, o valor duplicado é uma string vazia (pode ser apenas uma faceta de postagem, eu acho). Tais duplicatas impedem a criação de um UNIQUE índice.

Você pode executar uma consulta para confirmar que tem uma duplicata:

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

Presumivelmente, no outro banco de dados, os dados são diferentes e as duplicatas não estão presentes.

Outras dicas

A duplicata está em seus dados, tente executar esta consulta para encontrá -los.

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

É porque você já tem registros na tabela que não são únicos (pelos sons, 2 registros com um valor em branco no campo TopicShortName).

Portanto, tem a ver com os dados, não com o próprio índice.

Se você estiver usando migrações baseadas em código e renomear uma propriedade de uma entidade e está tendo um índice exclusivo para a propriedade, a Entity Framework criará uma nova coluna e tentando adicionar um índice exclusivo para a nova coluna, mas a nova coluna tem todos os valores nulos, portanto, falhará. Você precisa modificar manualmente o código de migração para copiar os dados da coluna antiga antes da linha para criar índice.

Deveria ter especificado o valor da chave duplicado na mensagem de erro. "O valor da chave duplicado é ('', '', '') a instrução foi encerrada. Você tem valores duplicados que precisam ser abordados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top