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 | 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 da seguinte tabela Employee:
LastName | Nome | JobTitle | HireDate |
---|---|---|---|
Walters | Rob | Designer de ferramentas sênior | 2004-11-19 |
Brown | Kevin | Assistente de marketing | NULO |
Brown | 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 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 em uma tabela, examine Remover linhas duplicadas de uma tabela SQL Server.
Consulte Também
CREATE INDEX (Transact-SQL)
Criar índices exclusivos
Criar restrições exclusivas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de