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.
Consulte também