Уникальный индекс в уже существующей таблице базы данных - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь добавить новый уникальный индекс в одну из моих таблиц базы данных в SQL Server 2008. Это существующая таблица, и столбец, в котором я хочу, чтобы уникальный индекс уже имел несколько повторяющихся значений.

Могу ли я установить уникальный индекс для этого столбца? Если да, то как?

Ответы [ 5 ]

5 голосов
/ 02 сентября 2011

Сначала вам нужно удалить повторяющиеся значения в вашем столбце, а затем вы можете создать уникальный индекс для него.Итак, давайте предположим, что ваша таблица имеет 2 столбца, id и column1.Чтобы удалить дублирующиеся значения, вам нужно выбрать одно, оно может быть случайным или в некотором порядке.Так было бы так:

WITH CTE AS
(
     SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Id) Corr
     FROM YourTable
)
DELETE FROM CTE
WHERE Corr > 1

CREATE UNIQUE INDEX I_Unique ON YourTable(Column1)
4 голосов
/ 02 сентября 2011

Невозможно установить для этого столбца индекс UNIQUE, если в таблице уже есть повторяющиеся значения, если только вы не удалите записи, содержащие повторяющиеся значения для этого столбца. Это относится к определению UNIQUE.

1 голос
/ 02 сентября 2011

Нет, как следует из названия, уникальный индекс, который говорит, что ключ должен быть уникальным. Так что вы не можете

Смотрите это

0 голосов
/ 11 мая 2016

Может не соответствовать действительности в SQL Server 2008, однако вы можете использовать Management Studio для этого в более поздних версиях, таких как 2014.

  1. Щелкните правой кнопкой мыши по вашему столу
  2. Выберите Дизайн
  3. Разверните "Идентификационные данные" и установите (Идентификационные данные) в Да
  4. Сохранить
0 голосов
/ 02 сентября 2011

Если в столбце уже есть повторяющиеся значения, я бы порекомендовал вместо этого создать уникальный составной ключ.

Например, чтобы решить эту проблему с этим дизайном таблицы, необходимо создать уникальное ограничение для таблицы.Столбцы CustomerID / ProductID:

создать уникальный индекс cust_products_unique для CustomerProducts (CustomerID, ProductID)

, так что по сути комбинация полей обеспечивает уникальность индекса.

С уважением

...