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.
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:
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:
W SQL Server Management Studio Express:
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 .
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
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.
Szukasz czegoś takiego
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b
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
?
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