Я получаю ошибку при выполнении следующей команды Transact-SQL:
CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)
Ошибка:
Сообщение 1505, Уровень 16, состояние 1, оператор Line 1 The CREATE UNIQUE INDEX, завершенный, потому что дублирующийся ключ был найден для имени объекта 'dbo. DimMeasureTopic' и имя индекса 'IX_TopicShortName'. Дублирующееся значение ключа ().
Когда я работаю SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName'
или SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]')
индекс IX_TopicShortName не отображается. Таким образом, кажется, нет дубликата.
Я имею ту же схему в другой базе данных и могу создать индекс без проблем там. Какие-либо идеи, почему это не создаст здесь?
Это не то, что индекс уже существует, но что есть дубликаты поля поле Topicshortname
в самом таблице. В соответствии с сообщением об ошибке. Дублирующее значение является пустой строкой (это может быть просто аспект публикации, я думаю). Такие дубликаты предотвращают создание уникального индекса
.
Вы можете запустить запрос, чтобы подтвердить, что у вас есть дубликат:
SELECT
TopicShortName,
COUNT(*)
FROM
DimMeasureTopic
GROUP BY
TopicShortName
HAVING
COUNT(*) > 1
, по-видимому, в другой базе данных, данные разные, а дубликаты нет.
Индекс уже не существует, но существуют повторяющиеся значения поля TopicShortName
в самой таблице. В соответствии с сообщением об ошибке, повторяющееся значение является пустой последовательностью (это может быть просто аспект размещения, я полагаю). Такие дубликаты препятствуют созданию индекса UNIQUE
.
Можно выполнить запрос для подтверждения наличия дубликата:
SELECT
TopicShortName,
COUNT(*)
FROM
DimMeasureTopic
GROUP BY
TopicShortName
HAVING
COUNT(*) > 1
Предположительно, в другой базе данных данные отличаются, а дубликаты отсутствуют.
-121--1112758-В SQL Server ограничение уникальности действительно реализовано как уникальный индекс. Используйте
CREATE UNIQUE INDEX <uix_name> ON <table_name>(<col_A>, <col_B>)
Для получения дополнительной информации см. на этой странице MSDN .
-121--2070716-Дубликат находится в ваших данных, попробуйте выполнить этот запрос, чтобы найти его.
SELECT TopicShortName, COUNT(*)
FROM DimMeasureTopic
GROUP BY TopicShortName
HAVING COUNT(*) > 1
Это потому, что у вас уже есть записи в таблице, которые не являются уникальными (судя по всему, 2 записи с пустым значением в поле TopicShortName).
Итак, это связано с данными, а не с самим индексом.