MSSQLSERVER_1505

Detalhes

Nome do produto

SQL Server

Versão do produto

10.50

Número da compilação do produto

10.5

ID do evento

1505

Origem do evento

MSSQLSERVER

Componente

SQLEngine

Nome simbólico

DUP_KEY

Texto da mensagem

A instrução CREATE UNIQUE INDEX foi encerrada porque foi encontrada uma chave duplicada para o nome de objeto '%. * ls' e para o nome de índice '%. * ls'. O valor da chave duplicada é %ls.

Explicação

Esse erro ocorre quando você tenta criar um índice exclusivo e mais de uma linha da tabela contém o valor duplicado especificado. Um índice exclusivo é criado quando você cria um índice e especifica a palavra-chave UNIQUE ou quando cria uma restrição UNIQUE. A tabela não pode conter linhas que tenham valores duplicados nas colunas definidas no índice ou na restrição.

Considere os dados na seguinte tabela Funcionário:

LastName

FirstName

JobTitle

HireDate

Walters

Rob

Designer de ferramentas sênior

2004-11-19

Brown

Kevin

Assistente de marketing

NULL

Brown

Jo

Engenheiro de design

NULL

Walters

Rob

Designer de ferramentas

2001-08-09

Não é possível criar um índice exclusivo com as combinações de coluna LastName ou LastName, FirstName por causa dos valores duplicados nas linhas.

Menos óbvia é a possibilidade de ocorrer uma violação de exclusividade na coluna HireDate. Para fins de indexação, valores NULL são comparados como iguais. Portanto, você não poderá criar um índice exclusivo ou uma restrição exclusiva se os valores de chave forem NULL em mais de uma linha. Considerando-se os dados acima, não é possível criar um índice exclusivo com base nas combinações de coluna HireDate ou LastName, HireDate.

A mensagem de erro 1505 retorna a primeira linha que viola a restrição de exclusividade. Pode haver outras linhas duplicadas na tabela. Para encontrar todas as linhas duplicadas, consulte a tabela especificada e use as cláusulas GROUP BY e HAVING para reportar essas linhas. Por exemplo, a consulta a seguir retorna as linhas da tabela Funcionário que têm nomes e sobrenomes duplicados.

SELECT LastName, FirstName, count(*) FROM dbo.Employee GROUP BY LastName, FirstName HAVING count(*) > 1;

Ação do usuário

Considere as soluções descritas a seguir.

  • Adicione ou remova colunas na definição do índice ou da restrição para criar uma composição exclusiva. No exemplo anterior, adicionar uma coluna MiddleName à definição do índice ou da restrição pode resolver o problema de duplicação.

  • Selecione colunas definidas como NOT NULL quando escolher colunas para um índice exclusivo ou para uma restrição exclusiva. Isso elimina a possibilidade de ocorrer uma violação de exclusividade gerada quando mais de uma linha contiver NULL nos valores de chave.

  • Se os valores duplicados forem o resultado de erros de entrada de dados, corrija os dados manualmente e, em seguida, crie o índice ou a restrição. Para obter informações sobre como remover linhas duplicadas de uma tabela, consulte o artigo 139444 da Base de Dados de Conhecimento: Como remover linhas duplicadas de uma tabela no SQL Server.