SQL Server 2005 Jak stworzyć unikalne ograniczenie?

181

Jak utworzyć unikalne ograniczenie dla istniejącej tabeli w SQL Server 2005?

Szukam zarówno TSQL, jak i jak to zrobić na schemacie bazy danych.

David Basarab
źródło

Odpowiedzi:

272

Polecenie SQL to:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

Zobacz pełną składnię tutaj .

Jeśli chcesz to zrobić ze schematu bazy danych:

  • kliknij tabelę prawym przyciskiem myszy i wybierz „Indeksy / klucze”
  • kliknij przycisk Dodaj, aby dodać nowy indeks
  • wprowadź niezbędne informacje we właściwościach po prawej stronie:
    • kolumny, które chcesz (kliknij przycisk wielokropka, aby wybrać)
    • zestaw jest unikatowy dla Tak
    • nadaj mu odpowiednią nazwę
Rory
źródło
1
Działa ... ale ... dlaczego ograniczenie jest pokazane w folderze INDEX zamiast folderu CONSTRAINTS. Jest pokazany z inną ikoną, ale i tak powinien być w folderze ograniczeń.
Fernando Torres,
84

W SQL Server Management Studio Express:

  • Kliknij tabelę prawym przyciskiem myszy, wybierz polecenie Modyfikuj lub Projektuj (dla późniejszych wersji)
  • Kliknij prawym przyciskiem myszy pole, wybierz Indeksy / klucze ...
  • Kliknij Dodaj
  • W polu Kolumny wybierz nazwę pola , która ma być unikalna.
  • W polu Typ wybierz Unikalny klucz .
  • Kliknij Zamknij , zapisz tabelę.
James Lawruk
źródło
29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
WildJoe
źródło
15

Ostrzeżenie: w kolumnie, którą ustawiłeś jako unikalną, może znajdować się tylko jeden pusty wiersz.

Możesz to zrobić za pomocą filtrowanego indeksu w SQL 2008:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

Zobacz Wartość pola musi być unikalna, chyba że dla zakresu odpowiedzi jest NULL .

Wiewiórka
źródło
jak to zrobić w SQL Server 2005?
Maxrunner
2
Nie jest to możliwe w przypadku serwera SQL 2005. Zdecydowanie polecam aktualizację do bardziej aktualnego RDBMS - oficjalnie nie będzie obsługiwany od 12 kwietnia 2016 r.
reedstonefood
13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
Ivan Bosnic
źródło
10

Odkryłem również, że możesz to zrobić za pomocą diagramów bazy danych.

Klikając prawym przyciskiem myszy tabelę i wybierając Indeksy / klucze ...

Kliknij przycisk „Dodaj” i zmień kolumny na kolumny, które chcesz uczynić wyjątkowymi.

Zmiana jest wyjątkowa na „Tak”.

Kliknij zamknij i zapisz diagram, a doda go do tabeli.

David Basarab
źródło
8

Szukasz czegoś takiego

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Dokumenty MSDN

Thunder3
źródło
6

Aby utworzyć ograniczenie UNIQUE w jednej lub wielu kolumnach, gdy tabela jest już utworzona, użyj następującego kodu SQL:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Aby umożliwić nazewnictwo ograniczenia UNIQUE dla powyższego zapytania

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Zapytanie obsługiwane przez MySQL / SQL Server / Oracle / MS Access.

Rafiq
źródło
UNIQUE NONCLUSTERED i opcje PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet,
5

Na schemacie studia zarządzania wybierz tabelę, kliknij prawym przyciskiem myszy, aby dodać nową kolumnę, jeśli chcesz, kliknij kolumnę prawym przyciskiem myszy i wybierz „Sprawdź ograniczenia”, tam możesz ją dodać.

Gibony
źródło
0

W niektórych sytuacjach może być pożądane upewnienie się, że klucz unikalny nie istnieje przed jego utworzeniem. W takich przypadkach poniższy skrypt może pomóc:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
Mario Vázquez
źródło