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

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

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

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

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

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

Ответы [ 4 ]

98 голосов
/ 02 апреля 2014

Установить столбец как уникальный в 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.
48 голосов
/ 03 марта 2011

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

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

14 голосов
/ 17 декабря 2015

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

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

enter image description here

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

enter image description here

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

enter image description here

  1. Нажмите OK в обоих окнах
8 голосов
/ 15 сентября 2018

Одно неясно охвачено тем, что 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

...