MSSQLSERVER_1505
Si applica a: SQL Server
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 1505 |
Origine evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbolico | DUP_KEY |
Testo del messaggio | CREATE UNIQUE INDEX terminato perché è stata trovata una chiave duplicata per il nome dell'oggetto '%.*ls' e il nome di indice '%.*ls'. Valore della chiave duplicata: %ls. |
Spiegazione
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. Un indice univoco viene creato quando si crea un indice e si specifica la parola chiave UNIQUE o quando si crea un vincolo UNIQUE. Nella tabella non può essere contenuta alcuna riga con valori duplicati nelle colonne definite nell'indice o nel vincolo.
Si considerino i dati nella tabella Employee seguente:
LastName | FirstName | JobTitle | HireDate |
---|---|---|---|
Walters | Rob | Progettista senior di strumenti | 2004-11-19 |
Marrone | Kevin | Assistente marketing | NULL |
Marrone | Jo | Progettista | NULL |
Walters | Rob | Progettista di strumenti | 2001-08-09 |
Non è possibile creare un indice univoco sulle combinazioni delle colonne LastName o LastName, FirstName poiché nelle righe sono presenti valori duplicati.
La potenziale violazione di univocità nella colonna HireDate è meno ovvia. Ai fini dell'indicizzazione, i valori NULL vengono considerati uguali. Non è pertanto possibile creare un indice univoco o un vincolo UNIQUE se i valori di chiave sono NULL in più di una riga. In base ai dati precedenti, non è possibile creare un indice univoco nelle combinazioni delle colonne HireDate o LastName, HireDate.
Il messaggio di errore 1505 restituisce la prima riga che viola il vincolo di univocità. Nella tabella possono essere presenti altre righe duplicate. Per individuare tutte le righe duplicate, eseguire una query sulla tabella specificata e utilizzare le clausole GROUP BY e HAVING per segnalarle. Nella query seguente, ad esempio, vengono restituite le righe della tabella Employee in cui sono presenti nomi e cognomi duplicati.
SELECT LastName, FirstName, count(*) FROM dbo. Employee GROUP BY LastName, FirstName HAVING count(*) > 1;
Azione utente
Prendere in considerazione le seguenti soluzioni:
Aggiungere o rimuovere colonne nella definizione dell'indice o del vincolo per creare un indice composto univoco. Nell'esempio precedente, l'aggiunta di una colonna MiddleName alla definizione dell'indice o del vincolo potrebbe consentire di risolvere il problema di duplicazione.
Selezionare le colonne definite come NOT NULL quando si scelgono le colonne per un indice o un vincolo univoco. In questo modo viene eliminata la possibilità di una violazione di univocità causata più di una riga contiene NULL nei valori della chiave.
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. Per informazioni sulla rimozione di righe duplicate in una tabella, vedere Rimuovere righe duplicate da una tabella di SQL Server.
Vedi anche
CREATE INDEX (Transact-SQL)
Creare indici univoci
Creare vincoli UNIQUE