Jak mogę utworzyć unikatowe ograniczenie w mojej kolumnie (SQL Server 2008 R2)?

108

Mam SQL Server 2008 R2 i chcę ustawić unikalną kolumnę.

Wydaje się, że można to zrobić na dwa sposoby: „unikalny indeks” i „unikalne ograniczenie”. Nie różnią się zbytnio od tego, co rozumiem, chociaż większość poleca unikalne ograniczenie, ponieważ indeks również uzyskuje się automatycznie.

Jak utworzyć unikalne ograniczenie?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Czy istnieje sposób na utworzenie unikatowego ograniczenia za pomocą programu SQL Server Management Studio?

Biała wyspa
źródło

Odpowiedzi:

59

Aby utworzyć te ograniczenia za pomocą GUI, potrzebujesz okna dialogowego „indeksy i klucze”, a nie okna sprawdzającego ograniczenia.

Ale w twoim przypadku wystarczy uruchomić fragment kodu, który już masz. Nie trzeba w ogóle wpisywać tego w dialog wyrażeń.

Martin Smith
źródło
Czy mogę po prostu uruchomić to w zapytaniu? Kiedy próbowałem, przebiegło pomyślnie, ale czy jest gdzieś, gdzie mogę to sprawdzić (tj. Gdzie zostało zmienione ustawienie)?
White Island
@WhiteIsland - Powinieneś zobaczyć to w Eksploratorze obiektów SSMS, jeśli rozwiniesz tabelę i spojrzysz pod „Klucze”
Martin Smith
126

Ustaw kolumnę jako unikatową w SQL Server z GUI:

Naprawdę sprawiają, że biegasz po stodole, aby zrobić to za pomocą GUI:

Przed rozpoczęciem upewnij się, że kolumna nie narusza ograniczenia dotyczącego unikalności.

  1. Otwórz program SQL Server Management Studio.
  2. Kliknij prawym przyciskiem myszy swoją tabelę, kliknij „Projekt”.
  3. Kliknij prawym przyciskiem myszy kolumnę, którą chcesz edytować, pojawi się menu podręczne, kliknij Indeksy / klucze.
  4. Kliknij przycisk „Dodaj”.
  5. Rozwiń kartę „Ogólne”.
  6. Upewnij się, że w polu „kolumny” wybrano kolumnę, którą chcesz ustawić jako unikalną.
  7. Zmień pole „Typ” na „Unikalny klucz”.
  8. Kliknij „Zamknij”.
  9. W oknie pliku pojawi się mała gwiazdka, co oznacza, że ​​zmiany nie zostały jeszcze zapisane.
  10. Naciśnij Zapisz lub naciśnij Ctrl + s. Powinien zapisać, a Twoja kolumna powinna być unikalna.

Lub ustaw kolumnę jako unikatową w oknie Zapytanie SQL:

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

Zmiany wchodzą w życie natychmiast:

Command(s) completed successfully.
Eric Leschinski
źródło
Wspaniały. Możesz także dodać wiele kolumn w skrypcie TSQL w następujący sposób: alter table your_table add constraint pinky unique (yourcolumn, yourcolumn_2);
Jordan,
15

Oto inny sposób przez GUI, który robi dokładnie to, co robi twój skrypt, mimo że przechodzi przez indeksy (a nie ograniczenia) w eksploratorze obiektów.

  1. Kliknij prawym przyciskiem myszy „Indeksy” i kliknij „Nowy indeks ...” (uwaga: ta opcja jest wyłączona, jeśli masz otwartą tabelę w widoku projektu)

wprowadź opis obrazu tutaj

  1. Nadaj nowemu indeksowi nazwę („U_Name”), zaznacz „Unikalny” i kliknij „Dodaj ...”

wprowadź opis obrazu tutaj

  1. Wybierz kolumnę „Nazwa” w następnym oknie

wprowadź opis obrazu tutaj

  1. Kliknij OK w obu oknach
Tony L.
źródło
1
W programie SSMS 2014 opcje menu kontekstowego po kliknięciu prawym przyciskiem myszy służące do tworzenia nowego indeksu różnią się nieco od powyższych zrzutów ekranu. Po kliknięciu opcji Nowy indeks należy wybrać z listy (indeks klastrowy, indeks nieklastrowy, indeks podstawowy XML, indeks pomocniczy XML, indeks przestrzenny, indeks nieklastrowego magazynu kolumn i indeks klastrowego magazynu kolumn). Zwykle wybierasz indeks nieklastrowy.
iCode
8

Jedną rzeczą, która nie została jasno omówiona, jest to, że Microsoft sql tworzy w tle unikalny indeks dla dodanego ograniczenia

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

jak widać, pojawiło się nowe ograniczenie i nowy indeks U_Name

detzu
źródło