Как я могу создать уникальное ограничение для моего столбца (SQL Server 2008 R2)?

110

У меня есть SQL Server 2008 R2, и я хочу установить уникальный столбец.

Кажется, есть два способа сделать это: «уникальный индекс» и «уникальное ограничение». Они не сильно отличаются от того, что я понимаю, хотя большинством рекомендуется ограничение уникальности, потому что вы также получаете индекс автоматически.

Как создать уникальное ограничение?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Есть ли способ создать уникальное ограничение с помощью SQL Server Management Studio?

Белый остров
источник

Ответы:

59

Чтобы создать эти ограничения через графический интерфейс, вам понадобится диалог «индексы и ключи», а не проверка ограничений.

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

Мартин Смит
источник
Значит, я могу просто запустить его в запросе? Когда я попробовал, все прошло успешно, но можно ли куда-нибудь это посмотреть (т.е. где были изменены настройки)?
White Island
@WhiteIsland - Вы должны увидеть его в проводнике объектов SSMS, если развернете таблицу и загляните в раздел «Ключи»
Мартин Смит
128

Сделайте столбец уникальным в SQL Server из графического интерфейса:

Они действительно заставляют вас бегать по сараю, чтобы сделать это с помощью графического интерфейса:

Прежде чем начать, убедитесь, что ваш столбец не нарушает ограничения уникальности.

  1. Откройте SQL Server Management Studio.
  2. Щелкните правой кнопкой мыши свою таблицу, выберите «Дизайн».
  3. Щелкните правой кнопкой мыши столбец, который нужно отредактировать, появится всплывающее меню, выберите «Индексы / ключи».
  4. Нажмите кнопку «Добавить».
  5. Разверните вкладку «Общие».
  6. Убедитесь, что у вас есть столбец, который вы хотите сделать уникальным, выбранным в поле «столбцы».
  7. Измените поле «Тип» на «Уникальный ключ».
  8. Щелкните "Закрыть".
  9. Вы видите маленькую звездочку в окне файла, это означает, что изменения еще не сохранены.
  10. Нажмите "Сохранить" или нажмите Ctrl + s. Он должен сохраниться, а ваш столбец должен быть уникальным.

Или установите столбец как уникальный в окне запроса SQL:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

Изменения вступают в силу немедленно:

Command(s) completed successfully.
Эрик Лещинский
источник
Отлично. Также вы можете добавить несколько столбцов в сценарий TSQL следующим образом: изменить таблицу your_table добавить ограничение pinky unique (yourcolumn, yourcolumn_2);
Jordan
15

Вот еще один способ использования графического интерфейса пользователя, который делает именно то, что делает ваш скрипт, даже если он проходит через индексы (а не ограничения) в проводнике объектов.

  1. Щелкните правой кнопкой мыши «Индексы» и выберите «Новый индекс ...» (примечание: это отключено, если таблица открыта в режиме конструктора)

введите описание изображения здесь

  1. Дайте новому индексу имя ("U_Name"), отметьте "Уникальный" и нажмите "Добавить ..."

введите описание изображения здесь

  1. Выберите столбец «Имя» в следующем окне.

введите описание изображения здесь

  1. Нажмите ОК в обоих окнах
Тони Л.
источник
1
В SSMS 2014 параметры контекстного меню при щелчке правой кнопкой мыши для создания нового индекса немного отличаются от приведенных выше снимков экрана. При нажатии кнопки «Новый индекс» необходимо выбрать из списка (Кластерный индекс, Некластеризованный индекс, Первичный XML-индекс, Вторичный XML-индекс, Пространственный индекс, Некластеризованный индекс Columnstore и Кластерный индекс Columnstore). Обычно вы выбираете некластеризованный индекс.
iCode
8

Одна вещь, о которой не говорится четко, заключается в том, что microsoft sql создает в фоновом режиме уникальный индекс для добавленного ограничения.

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

как видите, есть новое ограничение и новый индекс U_Name

децу
источник