Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Warehouse in Microsoft Fabric databáze
SQL v Microsoft Fabric
Pomocí ALTER TABLE zadejte vlastnosti PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK omezení nebo DEFAULT definici, kterou přidáte do tabulky pomocí ALTER TABLE (Transact-SQL).
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
Určuje začátek definice pro PRIMARY KEYdefinici , UNIQUE, FOREIGN KEY, , nebo CHECK omezení, nebo .DEFAULT
název omezení
Název omezení. Názvy omezení musí dodržovat pravidla pro identifikátory s tím rozdílem, že název nemůže začínat znakem čísla (#). Pokud ho nezadáte constraint_name, systém přiřadí k omezení vygenerovaný název.
PRIMÁRNÍ KLÍČ
Omezení, které vynucuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu. Pro každou tabulku můžete vytvořit pouze jedno PRIMARY KEY omezení.
UNIQUE
Omezení, které poskytuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu.
CLUSTERED | NECLUSTERED
Určuje, že se pro dané omezení vytvoří PRIMARY KEYUNIQUE clusterovaný nebo neclusterovaný index.
PRIMARY KEY ve výchozím nastavení jsou omezení nastavena na CLUSTEREDhodnotu .
UNIQUE ve výchozím nastavení jsou omezení nastavena na NONCLUSTEREDhodnotu .
Pokud clusterované omezení nebo index již v tabulce existuje, nemůžete zadat CLUSTERED. Pokud v tabulce již existuje clusterované omezení nebo index, PRIMARY KEY omezení se ve výchozím nastavení nastaví na NONCLUSTEREDhodnotu .
Sloupce, které jsou typu ntext, text, varchar(max), nvarchar(max), varbinary(max), xml nebo image , nemůžete zadat jako sloupce indexu.
column
Sloupec nebo seznam sloupců zadaných v závorkách, které použijete v novém omezení.
[ ASC | POPIS ]
Určuje pořadí řazení sloupců nebo sloupců, které se účastní omezení tabulky. Výchozí hodnota je vzestupné pořadí řazení (ASC).
S FILLFACTOR = FILLFACTOR = fillfactor
Určuje, jakým způsobem má Database Engine vytvořit každou indexovou stránku použitou k uložení dat indexu. Uživatelem zadané hodnoty fillfactor mohou být od 1 do 100. Pokud nezadáte hodnotu, výchozí hodnota je 0.
Pro zpětnou kompatibilitu tato dokumentace zahrnuje WITH FILLFACTOR = <fillfactor> jedinou možnost indexu, která se vztahuje na PRIMARY KEY omezení nebo UNIQUE na ně. Tato syntaxe nebude zdokumentovaná v budoucích verzích. V klauzuli index_option můžete zadat další možnosti indexu ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Applies to: SQL Server 2008 (10.0.x) a novější verze.
Určuje umístění úložiště indexu vytvořeného pro omezení. Pokud zadáte partition_scheme_name, index se rozdělí a oddíly se mapují na skupiny souborů, které partition_scheme_name určuje. Pokud zadáte skupinu souborů, index se vytvoří v pojmenované skupině souborů. Pokud zadáte výchozí hodnotu nebo pokud vůbec nezadáteON, index se vytvoří ve stejné skupině souborů jako tabulka. Pokud zadáte ON , když přidáte clusterovaný index pro určité PRIMARY KEYUNIQUE omezení, celá tabulka se při vytvoření clusterovaného indexu přesune do zadané skupiny souborů.
V tomto kontextu není výchozí klíčové slovo; jedná se o identifikátor výchozí skupiny souborů a musí být oddělený ONjako výchozí nebo ON[výchozí].. Pokud zadáte výchozí hodnotu, QUOTED_IDENTIFIER musí být ON tato možnost určená pro aktuální relaci. Toto je výchozí nastavení.
ODKAZY NA CIZÍ KLÍČ
Omezení, které poskytuje referenční integritu dat ve sloupci.
FOREIGN KEY Omezení vyžadují, aby každá hodnota ve sloupci existovala v zadaném sloupci v odkazované tabulce.
referenced_table_name
Tabulka odkazovaná FOREIGN KEY omezením.
ref_column
Sloupec nebo seznam sloupců v závorkách odkazovaných novým FOREIGN KEY omezením
PŘI ODSTRANĚNÍ { ŽÁDNÁ AKCE | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }
Určuje, jaká akce se stane s řádky v tabulce, kterou změníte, pokud tyto řádky mají referenční relaci a odstraníte odkazovaný řádek z nadřazené tabulky. Výchozí hodnota je NO ACTION.
ŽÁDNÁ AKCE
SQL Server Database Engine vyvolá chybu a vrátí zpět akci odstranění na řádku v nadřazené tabulce.
CASCADE
Odstraní odpovídající řádky z odkazující tabulky, pokud tento řádek odstraníte z nadřazené tabulky.
NASTAVIT HODNOTU NULL
Nastaví všechny hodnoty, které tvoří cizí klíč při NULL odstranění odpovídajícího řádku v nadřazené tabulce. Aby bylo možné toto omezení provést, musí mít sloupce cizího klíče hodnotu null.
NASTAVTE VÝCHOZÍ NASTAVENÍ
Nastaví všechny hodnoty, které tvoří cizí klíč, na výchozí hodnoty při odstranění odpovídajícího řádku v nadřazené tabulce. Aby bylo toto omezení provedeno, musí mít všechny sloupce cizího klíče výchozí definice. Pokud je sloupec s možnou hodnotou null a neexistuje žádná explicitní výchozí hodnota, NULL stane se implicitní výchozí hodnotou sloupce.
Nezadávejte CASCADE , jestli je tabulka zahrnutá do slučovací publikace, která používá logické záznamy. Další informace o logických záznamech naleznete v tématu Seskupit změny souvisejících řádků s logickými záznamy.
Nemůžete definovat ON DELETE CASCADE , jestli INSTEAD OF trigger ON DELETE již v tabulce, kterou upravujete, existuje.
Například v AdventureWorks2025 databázi ProductVendor má tabulka referenční relaci s tabulkou Vendor . Cizí ProductVendor.VendorID klíč odkazuje na Vendor.VendorID primární klíč.
Pokud spustíte příkaz DELETE na řádku v tabulce Vendor a zadáte akci ON DELETE CASCADE pro ProductVendor.VendorID, Database Engine zkontroluje jeden nebo více závislých řádků v tabulce ProductVendor. Pokud nějaké existují, odstraní se kromě řádku odkazovaného v tabulce také závislé řádky v ProductVendorVendor tabulce.
Pokud naopak zadáte NO ACTION, Database Engine vyvolá chybu a vrátí akci odstranění na řádku Vendor, pokud je v tabulce ProductVendor, která na ni odkazuje, alespoň jeden řádek.
ON UPDATE { NO ACTION | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }
Určuje akci, která se stane s řádky v tabulce, kterou změníte, když mají tyto řádky referenční relaci a aktualizujete odkazovaný řádek v nadřazené tabulce. Výchozí hodnota je NO ACTION.
ŽÁDNÁ AKCE
Database Engine vyvolá chybu a akce aktualizace na řádku v nadřazené tabulce se vrátí zpět.
CASCADE
Odpovídající řádky se aktualizují v odkazující tabulce, když se tento řádek aktualizuje v nadřazené tabulce.
NASTAVIT HODNOTU NULL
Nastaví všechny hodnoty, které tvoří cizí klíč NULL při aktualizaci odpovídajícího řádku v nadřazené tabulce. Aby bylo možné toto omezení provést, musí mít sloupce cizího klíče hodnotu null.
NASTAVTE VÝCHOZÍ NASTAVENÍ
Při aktualizaci odpovídajícího řádku v nadřazené tabulce jsou všechny hodnoty, které tvoří cizí klíč, nastaveny na výchozí hodnoty. Aby bylo toto omezení provedeno, musí mít všechny sloupce cizího klíče výchozí definice. Pokud je sloupec s možnou hodnotou null a neexistuje žádná explicitní výchozí sada hodnot, NULL stane se implicitní výchozí hodnotou sloupce.
Nezadávejte CASCADE , jestli je tabulka zahrnutá do slučovací publikace, která používá logické záznamy. Další informace o logických záznamech naleznete v tématu Seskupit změny souvisejících řádků s logickými záznamy.
ON UPDATE CASCADE, SET NULLnebo SET DEFAULT nelze definovat, pokud INSTEAD OF aktivační událost ON UPDATE již existuje v tabulce, která se mění.
Například v AdventureWorks2025 databázi ProductVendor má tabulka referenční relaci s tabulkou Vendor . Cizí ProductVendor.VendorID klíč odkazuje na Vendor.VendorID primární klíč.
Pokud spustíte příkaz UPDATE na řádku v tabulce Vendor a zadáte akci ON UPDATE CASCADE pro ProductVendor.VendorID, Database Engine zkontroluje jeden nebo více závislých řádků v tabulce ProductVendor. Pokud nějaké existují, aktualizuje se závislý řádek v ProductVendor tabulce a také řádek odkazovaný v Vendor tabulce.
Pokud naopak zadáte NO ACTION, Database Engine vyvolá chybu a vrátí akci aktualizace na řádku Vendor, pokud je v tabulce ProductVendor, která na ni odkazuje, alespoň jeden řádek.
NE PRO REPLIKACI
Applies to: SQL Server 2008 (10.0.x) a novější verze.
Pokud pro omezení zadáte tuto klauzuli, agenti replikace toto omezení při provádění operací zápisu nevynucují. Tuto klauzuli můžete zadat pro FOREIGN KEY omezení a CHECK omezení.
CONNECTION
Určuje dvojici tabulek uzlů, ke kterým se dané omezení edge může připojit.
ON DELETE určuje, co se stane s řádky v hraniční tabulce, když se odstraní uzly, které hraniční zařízení připojí.
DEFAULT
Určuje výchozí hodnotu sloupce. Definice slouží DEFAULT k zadání hodnot pro nový sloupec v existujících řádcích dat. Do sloupců, které mají datový typ DEFAULT, vlastnost, existující IDENTITY definici nebo vázané výchozí hodnoty, nemůžete přidávat DEFAULT definice. Pokud má sloupec existující výchozí hodnotu, musíte výchozí hodnotu před přidáním nového výchozího nastavení vypustit. Pokud zadáte výchozí hodnotu pro sloupec typu definovaný uživatelem, měl by tento typ podporovat implicitní převod z constant_expression na uživatelem definovaný typ. Pokud chcete zachovat kompatibilitu se staršími verzemi SQL Server, můžete přiřadit název omezení DEFAULT.
constant_expression
Literálová hodnota, NULLfunkce nebo systémová funkce, kterou používáte jako výchozí hodnotu sloupce. Pokud používáte constant_expression ve spojení se sloupcem definovaným jako uživatelem definovaný typ Microsoft .NET Framework, musí implementace typu podporovat implicitní převod z constant_expression na uživatelem definovaný typ.
SLOUPEC FOR
Určuje sloupec přidružený k definici na úrovni DEFAULT tabulky.
S HODNOTAMI
Když přidáte sloupec a
DEFAULTomezení, pokud sloupec povoluje hodnoty null, pomocíWITH VALUESnastaví hodnotu nového sloupce pro existující řádky na hodnotu zadanou vDEFAULTconstant_expression.Pokud sloupec, který přidáváte, nepovoluje hodnoty null, hodnota sloupce pro existující řádky je vždy nastavená na hodnotu zadanou ve výrazu
DEFAULTkonstanty.
V SQL Server 2012 a novějších verzích může být operace metadat adding-not-null-columns-as-an-online-operation.
Pokud použijete WITH VALUES i v případě, že se související sloupec nepřidává, nemá žádný vliv.
CHECK
Omezení, které vynucuje integritu domény omezením možných hodnot, které lze zadat do sloupce nebo sloupců.
logical_expression
Logický výraz použitý v CHECK omezení, které vrací TRUE nebo FALSE.
logical_expression použitá s omezeními CHECK nemůže odkazovat na jinou tabulku, ale může odkazovat na jiné sloupce ve stejné tabulce pro stejný řádek. Výraz nemůže odkazovat na datový typ aliasu.
Remarks
Když přidáte FOREIGN KEY nebo CHECK omezíte, systém zkontroluje všechna existující data porušení omezení, pokud nezadáte WITH NOCHECK možnost. Pokud dojde k nějakým porušením, ALTER TABLE selže a vrátí chybu. Když do existujícího sloupce přidáte nové PRIMARY KEY nebo UNIQUE omezené omezení, musí být data ve sloupci nebo sloupcích jedinečná. Pokud jsou nalezeny duplicitní hodnoty, ALTER TABLE selže. Tato WITH NOCHECK možnost nemá žádný vliv při přidávání PRIMARY KEY nebo UNIQUE omezeních.
Každý PRIMARY KEY a UNIQUE omezení vygenerují index. Počet UNIQUE a PRIMARY KEY omezení nemohou způsobit, že počet indexů v tabulce překročí 999 neclusterovaných indexů a 1 clusterovaný index. Omezení cizího klíče negenerují index automaticky. Sloupce cizího klíče však často používáte v kritériích spojení v dotazech tak, že odpovídáte sloupci nebo sloupcům v omezení cizího klíče jedné tabulky s primárním nebo jedinečným klíčovým sloupcem nebo sloupci v druhé tabulce. Index sloupců cizího klíče umožňuje Database Engine rychle najít související data v tabulce cizího klíče.
V SQL Server 2022 (16.x) a novějších verzích podporují operace obnovení přidávání omezení tabulky pro primární klíč a jedinečná omezení klíče. Další informace o povolení a používání resumable ALTER TABLE ADD CONSTRAINT operací naleznete v tématu Obnovitelné přidání omezení tabulky.
Sklad v Microsoft Fabric podporuje omezení ADD nebo DROPPRIMARY KEY, UNIQUE a FOREIGN_KEY omezení sloupců, ale pouze pokud zadáte možnost NOT ENFORCED. Sklad v Microsoft Fabric blokuje všechny ostatní operace ALTER TABLE.
Examples
Příklady najdete v ALTER TABLE (Transact-SQL).