Compartilhar via


MSSQLSERVER_1505

Aplica-se a: SQL Server

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 1505
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico DUP_KEY
Texto da mensagem CREATE UNIQUE INDEX foi encerrado porque uma chave duplicada foi encontrada para o nome do objeto '%.*ls' e o nome do í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 da seguinte tabela Employee:

Sobrenome Nome JobTitle HireDate
Walters Rob Designer de ferramentas sênior 2004-11-19
Marrom Kevin Marketing Assistant NULO
Marrom Jo Engenheiro de design NULO
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 e FirstName devido aos 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 os dados acima, não é possível criar um índice exclusivo com base nas combinações de coluna HireDate ou LastName e 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 Employee que têm nomes e sobrenomes duplicados.

SELECT Sobrenome, Nome, count(*) FROM dbo. Funcionário GROUP BY Sobrenome, Nome 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 em uma tabela, examine Remover linhas duplicadas de uma tabela do SQL Server.

Confira também

CREATE INDEX (Transact-SQL)
Criar índices exclusivos
Criar restrições exclusivas