MSSQLSERVER_1505MSSQLSERVER_1505

Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions) Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions)

DetalhesDetails

AtributoAttribute ValorValue
Nome do ProdutoProduct Name SQL ServerSQL Server
ID do eventoEvent ID 15051505
Origem do EventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbólicoSymbolic Name DUP_KEYDUP_KEY
Texto da mensagemMessage Text 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'.CREATE UNIQUE INDEX terminated because a duplicate key was found for object name '%.*ls' and index name '%.*ls'. O valor da chave duplicada é %ls.The duplicate key value is %ls.

ExplicaçãoExplanation

Esse erro ocorre quando você tenta criar um índice exclusivo e mais de uma linha da tabela contém o valor duplicado especificado.This error occurs when you attempt to create a unique index and more than one row in the table contains the specified duplicate value. Um índice exclusivo é criado quando você cria um índice e especifica a palavra-chave UNIQUE ou quando cria uma restrição UNIQUE.A unique index is created when you create an index and specify the UNIQUE keyword, or when you create a UNIQUE constraint. A tabela não pode conter linhas que tenham valores duplicados nas colunas definidas no índice ou na restrição.The table cannot contain any rows that have duplicate values in the columns defined in the index or constraint.

Considere os dados da seguinte tabela Employee:Consider the data in the following Employee table:

LastNameLastName NomeFirstName JobTitleJobTitle HireDateHireDate
WaltersWalters RobRob Designer de ferramentas sêniorSenior Tool Designer 2004-11-192004-11-19
BrownBrown KevinKevin Assistente de marketingMarketing Assistant NULONULL
BrownBrown JoJo Engenheiro de designDesign Engineer NULONULL
WaltersWalters RobRob Designer de ferramentasTool Designer 2001-08-092001-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.A unique index can not be created on the column combinations LastName or LastName, FirstName because of duplicate values in the rows.

Menos óbvia é a possibilidade de ocorrer uma violação de exclusividade na coluna HireDate.Less obvious is the potential for a uniqueness violation in the HireDate column. Para fins de indexação, valores NULL são comparados como iguais.For indexing purposes, NULL values compare as equal. 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.Therefore, you cannot create a unique index or constraint if the key values are NULL in more than one row. Considerando os dados acima, não é possível criar um índice exclusivo com base nas combinações de coluna HireDate ou LastName e HireDate.Given the data above, a unique index cannot be created on the column combinations HireDate or LastName, HireDate.

A mensagem de erro 1505 retorna a primeira linha que viola a restrição de exclusividade.Error message 1505 returns the first row that violates the uniqueness constraint. Pode haver outras linhas duplicadas na tabela.There may be other duplicate rows in the table. Para encontrar todas as linhas duplicadas, consulte a tabela especificada e use as cláusulas GROUP BY e HAVING para reportar essas linhas.To find all duplicate rows, query the specified table and use the GROUP BY and HAVING clauses to report the duplicate rows. Por exemplo, a consulta a seguir retorna as linhas da tabela Employee que têm nomes e sobrenomes duplicados.For example, the following query returns the rows in the Employee table that have duplicate first and last names.

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

Ação do usuárioUser Action

Considere as soluções descritas a seguir.Consider the following solutions.

  • Adicione ou remova colunas na definição do índice ou da restrição para criar uma composição exclusiva.Add or remove columns in the index or constraint definition to create a unique composite. No exemplo anterior, adicionar uma coluna MiddleName à definição do índice ou da restrição pode resolver o problema de duplicação.In the previous example, adding a MiddleName column to the index or constraint definition might resolve the duplication problem.

  • Selecione colunas definidas como NOT NULL quando escolher colunas para um índice exclusivo ou para uma restrição exclusiva.Select columns that are defined as NOT NULL when you choose columns for a unique index or constraint. Isso elimina a possibilidade de ocorrer uma violação de exclusividade gerada quando mais de uma linha contiver NULL nos valores de chave.This eliminates the possibility of a uniqueness violation caused when more than one row contains NULL in the key values.

  • 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.If the duplicate values are the result of data entry errors, manually correct the data and then create the index or constraint. Para obter informações sobre como remover linhas duplicadas de uma tabela, veja o artigo 139444 da base de dados de conhecimento: Como remover linhas duplicadas de uma tabela no SQL Server.For information about removing duplicate rows in a table, see Knowledge Base article 139444: How to remove duplicate rows from a table in SQL Server.

Consulte TambémSee Also

CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL)
Criar índices exclusivosCreate Unique Indexes
Criar restrições exclusivasCreate Unique Constraints