Як я можу створити унікальне обмеження для мого стовпця (SQL Server 2008 R2)?


108

У мене є SQL Server 2008 R2, і я хочу встановити унікальну колонку.

Здається, це існує два способи: "унікальний індекс" і "унікальне обмеження". Вони не сильно відрізняються від того, що я розумію, хоча унікальне обмеження рекомендується більшістю, оскільки ви також отримуєте індекс автоматично.

Як створити унікальне обмеження?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Чи існує спосіб створити унікальне обмеження через студію управління SQL Server?

Відповіді:


59

Для створення цих обмежень через графічний інтерфейс потрібен діалог "індекси та ключі", а не обмеження перевірки.

Але у вашому випадку вам просто потрібно запустити фрагмент коду, який ви вже маєте. Його взагалі не потрібно вводити в діалог виразів.


Тож я можу просто запустити його у запиті? Коли я спробував, він пройшов успішно, але чи можна десь подивитися, (де було змінено налаштування)?
Острів Білий

@WhiteIsland - Ви повинні побачити це в Провіднику SSMS-об’єктів, якщо розгорнути таблицю і заглянути під "Ключі"
Мартін Сміт

126

Встановити стовпчик як унікальний на SQL Server із графічного інтерфейсу:

Вони дійсно змушують вас бігати навколо сараю, щоб це зробити з графічним інтерфейсом:

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

  1. Відкрийте студію управління SQL Server.
  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 додати обмеження рожевий унікальний (yourcolumn, yourcolumn_2);
Йорданія

15

Ось ще один спосіб через графічний інтерфейс, який робить саме те, що робить ваш скрипт, хоча він проходить через індекси (а не обмеження) в провіднику об'єктів.

  1. Клацніть правою кнопкою миші на "Індекси" та натисніть "Новий індекс ..." (зверніть увагу: це вимкнено, якщо таблиця відкрита в дизайнерському поданні)

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

  1. Укажіть ім'я нового індексу ("U_Name"), поставте прапорець "Унікальний" та натисніть "Додати ..."

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

  1. Виберіть стовпчик "Ім'я" у наступному вдоні

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

  1. Натисніть кнопку ОК в обох вікнах

1
У SSMS 2014 параметри контекстного меню правою кнопкою миші для створення нового індексу дещо відрізняються від наведених вище екранів. Після натискання кнопки Новий індекс ви повинні вибрати з переліку (Кластерний індекс, Некластеризований індекс, Первинний індекс XML, Вторинний індекс XML, Просторовий індекс, Індекс некластеризованих стовпців стовпців та Індекс кластерних стовпців). Зазвичай ви обираєте Індекс без кластера.
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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.