MSSQLSERVER_1505

Aplica-se a: SQL Server

Details

Attribute Value
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 terminou porque foi encontrada uma chave duplicada para o nome do objeto '%.*ls' e o nome do índice '%.*ls'. O valor da chave duplicada é %ls.

Explanation

Este erro ocorre quando tenta criar um índice único e mais do que uma linha na tabela contém o valor duplicado especificado. Um índice único é criado quando se cria um índice e se especifica a palavra-chave ÚNICA, ou quando se cria uma restrição ÚNICA. A tabela não pode conter linhas que tenham valores duplicados nas colunas definidas no índice ou restrição.

Considere os dados na tabela seguinte de Colaboradores :

Apelido Primeiro nome Título do Cargo HireDate
Walters Luís Designer Sénior de Ferramentas 2004-11-19
Castanho Kevin Assistente de Marketing NULO
Castanho Jo Engenheiro de Projeto NULO
Walters Luís Designer de Ferramentas 2001-08-09

Um índice único não pode ser criado nas combinações de colunas Apelido ou Apelido, Primeiro Nome devido a valores duplicados nas linhas.

Menos óbvio é a possibilidade de violação de singularidade na coluna HireDate . Para efeitos de indexação, os valores NULL comparam-se como iguais. Portanto, não pode criar um índice ou restrição única se os valores-chave forem NULL em mais de uma linha. Dados os dados acima, não pode ser criado um índice único nas combinações de colunas HireDate ou ApelidoNome, DataContratar.

A mensagem de erro 1505 devolve a primeira linha que viola a restrição de unicidade. Podem existir 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 as linhas duplicadas. Por exemplo, a consulta seguinte devolve as linhas na tabela Employee que têm nomes e apelidos duplicados.

SELECIONE Apelido, NomePróprio, count(*) DE dbo. Grupo de Funcionários POR Apelido, Primeiro Nome TENDO contagem (*) > 1;

Ação do Usuário

Considere as seguintes soluções.

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

  • Selecione colunas que estejam definidas como NÃO NULAS quando escolher colunas para um índice ou restrição única. Isto elimina a possibilidade de uma violação de unicidade causada quando mais do que uma linha contém NULL nos valores das chaves.

  • Se os valores duplicados forem resultado de erros de introdução de dados, corrija manualmente os dados e depois crie o índice ou restrição. Para informações sobre como remover linhas duplicadas numa tabela, consulte Remover linhas duplicadas de uma tabela do SQL Server.

Ver também

CREATE INDEX (Transact-SQL)
Criar índices únicos
Criar Restrições Únicas