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.

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ę

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ę.

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

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 .


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]

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.



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.


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ć.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.