Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Warehouse w Microsoft Fabric
SQL database in Microsoft Fabric
Użyj ALTER TABLE, aby określić właściwości PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK ograniczenie lub DEFAULT definicji dodawanej do tabeli przy użyciu ALTER TABLE (Transact-SQL).
Transact-SQL konwencje składni
Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
Określa początek definicji PRIMARY KEYdla ograniczenia DEFAULT, UNIQUE, FOREIGN KEYlub CHECK .
nazwa_ograniczenia
Nazwa ograniczenia. Nazwy ograniczeń muszą być zgodne z regułami dla identyfikatorów, z tą różnicą, że nazwa nie może zaczynać się od znaku numeru (#). Jeśli nie podasz constraint_nameparametru , system przypisuje wygenerowaną nazwę do ograniczenia.
KLUCZ PODSTAWOWY
Ograniczenie wymuszające integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu. Dla każdej tabeli można utworzyć tylko jedno PRIMARY KEY ograniczenie.
UNIQUE
Ograniczenie zapewniające integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu.
KLASTROWANE | NIEKLASTROWANE
Określa, że indeks klastrowany lub nieklastrowany jest tworzony dla PRIMARY KEY ograniczenia lub UNIQUE .
PRIMARY KEY ograniczenia domyślne to CLUSTERED.
UNIQUE ograniczenia domyślne to NONCLUSTERED.
Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, nie można określić .CLUSTERED Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, PRIMARY KEY ograniczenia są domyślnie ustawione na NONCLUSTERED.
Nie można określić kolumn, które są typu ntext, text, varchar(max), nvarchar(max), varbinary(max), xml lub image data types jako kolumny dla indeksu.
kolumna
Kolumna lub lista kolumn określonych w nawiasach używanych w nowym ograniczeniu.
[ ASC | OPIS]
Określa kolejność sortowania kolumn lub kolumn uczestniczących w ograniczeniach tabeli. Wartość domyślna to rosnąca kolejność sortowania (ASC).
Z WYPEŁNIENIEM = WYPEŁNIENIEM
Określa, jak pełna Database Engine powinna sprawić, że każda strona indeksu będzie używana do przechowywania danych indeksu. Wartości fillfactor określone przez użytkownika mogą należeć do zakresu od 1 do 100. Jeśli nie określisz wartości, wartość domyślna to 0.
W celu zapewnienia zgodności z poprzednimi wersjami ta dokumentacja zawiera WITH FILLFACTOR = <fillfactor> jako jedyną opcję indeksu, która ma zastosowanie do PRIMARY KEY ograniczeń lub UNIQUE . Ta składnia nie zostanie udokumentowana w przyszłych wersjach. Inne opcje indeksu można określić w klauzuli index_option .ALTER TABLE
ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Applies to: SQL Server 2008 (10.0.x) i nowsze wersje.
Określa lokalizację przechowywania indeksu utworzonego dla ograniczenia. Jeśli określisz partition_scheme_name, indeks jest partycjonowany, a partycje są mapowane na grupy plików, które partition_scheme_name określa. Jeśli określisz grupę plików, indeks zostanie utworzony w nazwie filegroup. Jeśli określisz wartość domyślną lub nie określisz ON w ogóle, indeks zostanie utworzony w tej samej grupie plików co tabela. Jeśli określisz ON , kiedy dodasz indeks klastrowany dla PRIMARY KEY ograniczenia lub UNIQUE , cała tabela zostanie przeniesiona do określonej grupy plików podczas tworzenia klastrowanego indeksu.
W tym kontekście wartość domyślna nie jest słowem kluczowym; jest to identyfikator domyślnej grupy plików i musi być rozdzielany, tak jak w obszarze ON"default" lub ON[default]. Jeśli określisz wartość domyślnąQUOTED_IDENTIFIER, opcja musi być ON dostępna dla bieżącej sesji. Jest to ustawienie domyślne.
ODWOŁANIA DO KLUCZY OBCYCH
Ograniczenie zapewniające integralność referencyjną danych w kolumnie.
FOREIGN KEY Ograniczenia wymagają, aby każda wartość w kolumnie istniała w określonej kolumnie w tabeli, do których odwołuje się odwołanie.
referenced_table_name
Tabela przywoływane przez FOREIGN KEY ograniczenie.
ref_column
Kolumna lub lista kolumn w nawiasach, do których odwołuje się nowe FOREIGN KEY ograniczenie.
PO USUNIĘCIU { BRAK AKCJI | CASCADE | USTAW WARTOŚĆ NULL | USTAW WARTOŚĆ DOMYŚLNĄ }
Określa, jaka akcja ma miejsce w wierszach w tabeli, którą zmieniasz, jeśli te wiersze mają relację referencyjną i usuniesz przywoływany wiersz z tabeli nadrzędnej. Wartość domyślna to NO ACTION.
BRAK AKCJI
SQL Server Database Engine zgłasza błąd i cofa akcję usuwania w wierszu w tabeli nadrzędnej.
CASCADE
Usuwa odpowiednie wiersze z tabeli odwołującej się, jeśli usuniesz ten wiersz z tabeli nadrzędnej.
USTAW NULL
Ustawia wszystkie wartości tworzące klucz obcy do NULL po usunięciu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, kolumny klucza obcego muszą mieć wartość null.
USTAW DOMYŚLNE
Ustawia wszystkie wartości składające się z klucza obcego na wartości domyślne po usunięciu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, wszystkie kolumny klucza obcego muszą mieć definicje domyślne. Jeśli kolumna jest dopuszczana do wartości null i nie ma jawnego zestawu wartości domyślnych, NULL staje się niejawną wartością domyślną kolumny.
Nie określaj CASCADE , czy tabela jest zawarta w publikacji scalanej, która używa rekordów logicznych. Aby uzyskać więcej informacji na temat rekordów logicznych, zobacz Grupowanie zmian w powiązanych wierszach z rekordami logicznymi.
Nie można zdefiniować ON DELETE CASCADE , czy INSTEAD OF wyzwalacz ON DELETE już istnieje w tabeli, którą zmieniasz.
Na przykład w AdventureWorks2025 bazie danych ProductVendor tabela ma relację odwołania z tabelą Vendor . Klucz ProductVendor.VendorID obcy odwołuje się do klucza podstawowego Vendor.VendorID .
Jeśli wykonasz instrukcję DELETE wiersza w tabeli Vendor i określisz akcję ON DELETE CASCADE dla ProductVendor.VendorID, Database Engine sprawdza co najmniej jeden wiersz zależny w tabeli ProductVendor. Jeśli istnieją, wiersze zależne w ProductVendor tabeli są usuwane oprócz wiersza, do którego odwołuje się Vendor tabela.
Z drugiej strony, jeśli określisz NO ACTION, Database Engine zgłosi błąd i wycofa akcję usuwania w wierszu Vendor, gdy istnieje co najmniej jeden wiersz w tabeli ProductVendor odwołującej się do niego.
PODCZAS AKTUALIZACJI { BRAK AKCJI | CASCADE | USTAW WARTOŚĆ NULL | USTAW WARTOŚĆ DOMYŚLNĄ }
Określa, jaka akcja dzieje się z wierszami w tabeli, które są zmieniane, gdy te wiersze mają relację referencyjną i aktualizujesz przywoływany wiersz w tabeli nadrzędnej. Wartość domyślna to NO ACTION.
BRAK AKCJI
Database Engine zgłasza błąd, a akcja aktualizacji w wierszu w tabeli nadrzędnej jest cofana.
CASCADE
Odpowiednie wiersze są aktualizowane w tabeli odwołującej się po zaktualizowaniu tego wiersza w tabeli nadrzędnej.
USTAW NULL
Ustawia wszystkie wartości tworzące klucz obcy na NULL podczas aktualizowania odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, kolumny klucza obcego muszą mieć wartość null.
USTAW DOMYŚLNE
Wszystkie wartości tworzące klucz obcy są ustawione na wartości domyślne po zaktualizowaniu odpowiedniego wiersza w tabeli nadrzędnej. Aby to ograniczenie było wykonywane, wszystkie kolumny klucza obcego muszą mieć definicje domyślne. Jeśli kolumna jest dopuszczana do wartości null i nie ma jawnego zestawu wartości domyślnych, NULL staje się niejawną wartością domyślną kolumny.
Nie określaj CASCADE , czy tabela jest zawarta w publikacji scalanej, która używa rekordów logicznych. Aby uzyskać więcej informacji na temat rekordów logicznych, zobacz Grupowanie zmian w powiązanych wierszach z rekordami logicznymi.
ON UPDATE CASCADE, SET NULLlub SET DEFAULT nie można zdefiniować, jeśli INSTEAD OF wyzwalacz ON UPDATE już istnieje w tabeli, która jest zmieniana.
Na przykład w AdventureWorks2025 bazie danych ProductVendor tabela ma relację odwołania z tabelą Vendor . Klucz ProductVendor.VendorID obcy odwołuje się do klucza podstawowego Vendor.VendorID .
Jeśli wykonasz instrukcję UPDATE wiersza w tabeli Vendor i określisz akcję ON UPDATE CASCADE dla ProductVendor.VendorID, Database Engine sprawdza co najmniej jeden wiersz zależny w tabeli ProductVendor. Jeśli istnieje, wiersz zależny w ProductVendor tabeli zostanie zaktualizowany, a także wiersz, do którego Vendor odwołuje się tabela.
Z drugiej strony, jeśli określisz NO ACTION, Database Engine zgłasza błąd i cofa akcję aktualizacji w wierszu Vendor, gdy istnieje co najmniej jeden wiersz w tabeli ProductVendor odwołującej się do niego.
NIE DOTYCZY REPLIKACJI
Applies to: SQL Server 2008 (10.0.x) i nowsze wersje.
Jeśli określisz tę klauzulę dla ograniczenia, agenci replikacji nie wymuszają ograniczenia podczas wykonywania operacji zapisu. Tę klauzulę można określić dla FOREIGN KEY ograniczeń i CHECK ograniczeń.
CONNECTION
Określa parę tabel węzłów, z którymi może nawiązać połączenie danego ograniczenia krawędzi.
ON DELETE określa, co się stanie z wierszami w tabeli krawędzi, gdy węzły, z którymi łączy się krawędź, zostaną usunięte.
DEFAULT
Określa wartość domyślną kolumny. Użyj DEFAULT definicji, aby podać wartości dla nowej kolumny w istniejących wierszach danych. Nie można dodawać DEFAULT definicji do kolumn, które mają typ danych sygnatury czasowej , IDENTITY właściwość, istniejącą DEFAULT definicję lub powiązaną wartość domyślną. Jeśli kolumna ma istniejącą wartość domyślną, przed dodaniem nowej wartości domyślnej należy usunąć wartość domyślną. Jeśli określisz wartość domyślną dla kolumny typu zdefiniowanego przez użytkownika, typ powinien obsługiwać niejawną konwersję z constant_expression do typu zdefiniowanego przez użytkownika. Aby zachować zgodność z wcześniejszymi wersjami SQL Server, można przypisać nazwę ograniczenia do DEFAULT.
Constant_expression
Wartość literału, funkcja systemowa NULLlub , która jest używana jako domyślna wartość kolumny. Jeśli używasz constant_expression w połączeniu z kolumną zdefiniowaną jako typ zdefiniowany przez użytkownika Microsoft .NET Framework, implementacja typu musi obsługiwać niejawną konwersję z constant_expression do typu zdefiniowanego przez użytkownika.
KOLUMNA FOR
Określa kolumnę skojarzona z definicją na poziomie DEFAULT tabeli.
Z WARTOŚCIAMI
Po dodaniu kolumny i
DEFAULTograniczenia, jeśli kolumna zezwala na wartości null, przy użyciu ustawiaWITH VALUESwartość nowej kolumny dla istniejących wierszy na wartość podaną wDEFAULTconstant_expression.Jeśli dodana kolumna nie zezwala na wartości null, wartość kolumny dla istniejących wierszy jest zawsze ustawiana na wartość podaną w wyrażeniu
DEFAULTstałym.
W SQL Server 2012 i nowszych wersjach ta operacja może być operacją metadanych adding-not-null-columns-as-an-online-operation.
Jeśli używasz WITH VALUES polecenia , gdy powiązana kolumna nie jest również dodawana, nie ma żadnego efektu.
CHECK
Ograniczenie wymuszające integralność domeny przez ograniczenie możliwych wartości, które można wprowadzić w kolumnie lub kolumnach.
logical_expression
Wyrażenie logiczne używane w ograniczeniu CHECK , które zwraca TRUE wartość lub FALSE.
logical_expression używane z CHECK ograniczeniami nie mogą odwoływać się do innej tabeli, ale mogą odwoływać się do innych kolumn w tej samej tabeli dla tego samego wiersza. Wyrażenie nie może odwoływać się do typu danych aliasu.
Remarks
Po dodaniu FOREIGN KEY lub CHECK ograniczeniu system sprawdza wszystkie istniejące dane pod kątem naruszeń ograniczeń, chyba że zostanie określona WITH NOCHECK opcja. Jeśli wystąpią jakiekolwiek naruszenia, ALTER TABLE kończy się niepowodzeniem i zwraca błąd. Po dodaniu nowego PRIMARY KEY lub UNIQUE ograniczenia do istniejącej kolumny dane w kolumnie lub kolumnach muszą być unikatowe. Jeśli zostaną znalezione zduplikowane wartości, ALTER TABLE nie powiedzie się. Opcja WITH NOCHECK nie ma żadnego wpływu podczas dodawania PRIMARY KEY lub UNIQUE ograniczeń.
Każde PRIMARY KEY ograniczenie i UNIQUE generuje indeks.
UNIQUE Liczba indeksów i PRIMARY KEY ograniczeń nie może spowodować, że liczba indeksów w tabeli przekroczy 999 indeksów nieklastrowanych i 1 indeks klastrowany. Ograniczenia klucza obcego nie generują automatycznie indeksu. Jednak często używasz kolumn kluczy obcych w kryteriach sprzężenia w zapytaniach, pasując do kolumny lub kolumn w ograniczeniu klucza obcego jednej tabeli z kolumną klucza podstawowego lub unikatowego lub kolumnami w drugiej tabeli. Indeks w kolumnach klucza obcego umożliwia Database Engine szybkie znajdowanie powiązanych danych w tabeli kluczy obcych.
W SQL Server 2022 (16.x) i nowszych wersjach operacje z możliwością wznowienia obsługują dodawanie ograniczeń tabeli dla klucza podstawowego i unikatowych ograniczeń klucza. Aby uzyskać więcej informacji na temat włączania i używania operacji wznawianych ALTER TABLE ADD CONSTRAINT , zobacz Wznawianie ograniczeń tabeli.
Magazyn w Microsoft Fabric obsługuje ADD lub DROPPRIMARY KEY, UNIQUE i FOREIGN_KEY ograniczenia kolumn, ale tylko wtedy, gdy określisz opcję NOT ENFORCED. Magazyn w Microsoft Fabric blokuje wszystkie inne operacje ALTER TABLE.
Examples
Aby zapoznać się z przykładami, zobacz ALTER TABLE (Transact-SQL).