MSSQLSERVER_1505MSSQLSERVER_1505

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 15051505
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name DUP_KEYDUP_KEY
Testo del messaggioMessage Text Istruzione CREATE UNIQUE INDEX interrotta. Trovata chiave duplicata per il nome di oggetto '%.* ls' e il nome di indice '%.*ls'.CREATE UNIQUE INDEX terminated because a duplicate key was found for object name '%.ls' and index name '%.\ls'. Valore della chiave duplicata: %ls.The duplicate key value is %ls.

SpiegazioneExplanation

Questo errore si verifica quando si tenta di creare un indice univoco e il valore duplicato specificato è presente in più di una riga della tabella.This error occurs when you attempt to create a unique index and more than one row in the table contains the specified duplicate value. Un indice univoco viene creato quando si crea un indice e si specifica la parola chiave UNIQUE o quando si crea un vincolo UNIQUE.A unique index is created when you create an index and specify the UNIQUE keyword, or when you create a UNIQUE constraint. Nella tabella non può essere contenuta alcuna riga con valori duplicati nelle colonne definite nell'indice o nel vincolo.The table cannot contain any rows that have duplicate values in the columns defined in the index or constraint.

Si considerino i dati nella tabella Employee seguente:Consider the data in the following Employee table:

LastNameLastName FirstNameFirstName JobTitleJobTitle HireDateHireDate
WaltersWalters RobRob Progettista senior di strumentiSenior Tool Designer 2004-11-192004-11-19
BrownBrown KevinKevin Assistente marketingMarketing Assistant NULLNULL
BrownBrown JoJo ProgettistaDesign Engineer NULLNULL
WaltersWalters RobRob Progettista di strumentiTool Designer 2001-08-092001-08-09

Non è possibile creare un indice univoco sulle combinazioni delle colonne LastName o LastName, FirstName poiché nelle righe sono presenti valori duplicati.A unique index can not be created on the column combinations LastName or LastName, FirstName because of duplicate values in the rows.

La potenziale violazione di univocità nella colonna HireDate è meno ovvia.Less obvious is the potential for a uniqueness violation in the HireDate column. Ai fini dell'indicizzazione, i valori NULL vengono considerati uguali.For indexing purposes, NULL values compare as equal. Non è pertanto possibile creare un indice univoco o un vincolo UNIQUE se i valori di chiave sono NULL in più di una riga.Therefore, you cannot create a unique index or constraint if the key values are NULL in more than one row. In base ai dati precedenti, non è possibile creare un indice univoco nelle combinazioni delle colonne HireDate o LastName, HireDate.Given the data above, a unique index cannot be created on the column combinations HireDate or LastName, HireDate.

Il messaggio di errore 1505 restituisce la prima riga che viola il vincolo di univocità.Error message 1505 returns the first row that violates the uniqueness constraint. Nella tabella possono essere presenti altre righe duplicate.There may be other duplicate rows in the table. Per individuare tutte le righe duplicate, eseguire una query sulla tabella specificata e utilizzare le clausole GROUP BY e HAVING per segnalarle.To find all duplicate rows, query the specified table and use the GROUP BY and HAVING clauses to report the duplicate rows. Nella query seguente, ad esempio, vengono restituite le righe della tabella Employee in cui sono presenti nomi e cognomi duplicati.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;

Azione dell'utenteUser Action

Prendere in considerazione le seguenti soluzioni:Consider the following solutions.

  • Aggiungere o rimuovere colonne nella definizione dell'indice o del vincolo per creare un indice composto univoco.Add or remove columns in the index or constraint definition to create a unique composite. Nell'esempio precedente, l'aggiunta di una colonna MiddleName alla definizione dell'indice o del vincolo potrebbe consentire di risolvere il problema di duplicazione.In the previous example, adding a MiddleName column to the index or constraint definition might resolve the duplication problem.

  • Selezionare le colonne definite come NOT NULL quando si scelgono le colonne per un indice o un vincolo univoco.Select columns that are defined as NOT NULL when you choose columns for a unique index or constraint. In questo modo viene eliminata la possibilità di una violazione di univocità causata più di una riga contiene NULL nei valori della chiave.This eliminates the possibility of a uniqueness violation caused when more than one row contains NULL in the key values.

  • Se i valori duplicati sono il risultato di errori di immissione di dati, correggere manualmente i dati e quindi creare l'indice o il vincolo.If the duplicate values are the result of data entry errors, manually correct the data and then create the index or constraint. Per informazioni sulla rimozione di righe duplicate in una tabella, vedere l'articolo 139444 della Knowledge Base How to remove duplicate rows from a table in SQL Server (Come rimuovere righe duplicate da una tabella in 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.

Vedere ancheSee Also

CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL)
Creare indici univociCreate Unique Indexes
Creare vincoli univociCreate Unique Constraints