Impossibile creare l'indice a causa di duplicati che non esiste?
-
24-09-2019 - |
Domanda
Ricevo un errore eseguendo il seguente comando Transact-SQL:
CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)
L'errore è:
Msg 1505, livello 16, stato 1, riga 1 L'istruzione CREATE UNIQUE INDEX terminata perché una chiave duplicata era trovato per il nome dell'oggetto 'Dbo.DimMeasureTopic' e l'indice nome 'IX_TopicShortName'. Il duplicare valore della chiave è ().
Quando eseguo SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName'
o SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]')
l'indice IX_TopicShortName non viene visualizzata. Così non sembra essere un duplicato.
Ho lo stesso schema in un altro database e può creare l'indice, senza problemi lì. Tutte le idee perché non creerà qui?
Soluzione
Non è che l'indice già esiste, ma che ci sono valori duplicati del campo TopicShortName
nella tabella stessa. Secondo il messaggio di errore il valore duplicato è una stringa vuota (potrebbe essere solo un aspetto di distacco immagino). Tali duplicati impedire la creazione di un indice UNIQUE
.
È possibile eseguire una query per confermare che si dispone di un duplicato:
SELECT
TopicShortName,
COUNT(*)
FROM
DimMeasureTopic
GROUP BY
TopicShortName
HAVING
COUNT(*) > 1
Presumibilmente nella altro database i dati sono diversi, e i duplicati non sono presenti.
Altri suggerimenti
Il duplicato è nei dati, provare a eseguire la query per trovarlo.
SELECT TopicShortName, COUNT(*)
FROM DimMeasureTopic
GROUP BY TopicShortName
HAVING COUNT(*) > 1
E 'perché avete record della tabella già che non sono unici (dai suoni di esso, 2 record con un valore vuoto nel campo TopicShortName).
Quindi, è a che fare con i dati, non l'indice stesso.
Se si utilizza migrazioni basati su codice, e si rinomina una proprietà di un'entità e si stanno avendo un indice univoco per il quadro di proprietà, un'entità creerà una nuova colonna e cercando di aggiungere un indice univoco per la nuova colonna, ma la nuova colonna ha tutti i valori nulli, pertanto sarà sicuro. È necessario modificare manualmente il codice di migrazione per copiare i dati dal vecchio colonna prima la linea per creare l'indice.
E 'avrebbe dovuto precisare il valore della chiave duplicata nel messaggio di errore. "Il valore chiave duplicata è ( ' ' '','') L'istruzione è stata terminata. Hai valori duplicati che devono essere affrontati.