Sdílet prostřednictvím


STOL column_constraint (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Určuje vlastnosti omezení PRIMARY KEY, FOREIGN KEY, UNIQUE nebo CHECK, které je součástí nové definice sloupce přidané do tabulky pomocí ALTER TABLE.

Transact-SQL konvence syntaxe

Syntax

Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric

[ CONSTRAINT constraint_name ]   
{   
    [ NULL | NOT NULL ]   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [ WITH FILLFACTOR = fillfactor ]   
        [ WITH ( index_option [, ...n ] ) ]  
        [ ON { partition_scheme_name (partition_column_name)   
            | filegroup | "default" } ]   
    | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name   
            [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}  

Syntaxe pro Microsoft Fabric Warehouse

[ CONSTRAINT constraint_name ]  
{  
    { PRIMARY KEY | UNIQUE }  
       NONCLUSTERED    
        (column [ ASC | DESC ] [ ,...n ] )  
NOT ENFORCED
    | FOREIGN KEY  
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]  
NOT ENFORCED
}  

Arguments

CONSTRAINT

Určuje začátek definice pro omezení PRIMÁRNÍ KLÍČ, UNIQUE, FOREIGN KEY nebo CHECK.

constraint_name
Je 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 constraint_name není zadán, je k omezení přiřazen název vygenerovaný systémem.

NULL | NE NULL

Určuje, jestli sloupec může přijímat NULL hodnoty. Sloupce, které nepovolují NULL hodnoty, lze přidat pouze v případě, že mají zadanou výchozí hodnotu. Pokud nový sloupec umožňuje NULL hodnoty a není zadán žádný výchozí, nový sloupec obsahuje NULL pro každý řádek v tabulce. Pokud nový sloupec umožňuje NULL hodnoty a přidá se do nového sloupce výchozí definice, můžete použít možnost WITH VALUES k uložení výchozí hodnoty v novém sloupci pro každý existující řádek v tabulce.

Pokud nový sloupec nepovoluje NULL hodnoty, musí být přidána definice DEFAULT s novým sloupcem. Nový sloupec se automaticky načte s výchozí hodnotou v nových sloupcích v každém existujícím řádku.

Když přidání sloupce vyžaduje fyzické změny řádků dat v tabulce, například přidání výchozích hodnot na každý řádek, zámky jsou v tabulce uloženy při spuštění ALTER TABLE. To má vliv na možnost změnit obsah tabulky, když je zámek na místě. Naproti tomu přidání sloupce, který umožňuje NULL hodnoty a nezadá výchozí hodnotu, je pouze operace metadat a nezahrnuje žádné zámky.

Pokud použijete nastavení CREATE TABLEALTER TABLEdatabáze a relace a případně přepíšete hodnotu null datového typu, který se používá v definici sloupce. Doporučujeme, abyste vždy explicitně definovali nekomprimované sloupce jako NULL nebo NOT NULL , pokud používáte uživatelsky definovaný datový typ, aby sloupec mohl používat výchozí hodnotu nullability datového typu. Další informace naleznete v tématu CREATE TABLE.

PRIMÁRNÍ KLÍČ

Je omezení, které vynucuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu. Pro každou tabulku lze vytvořit pouze jedno omezení PRIMÁRNÍHO KLÍČE.

UNIQUE

Je omezení, které poskytuje integritu entity pro zadaný sloupec nebo sloupce pomocí jedinečného indexu.

CLUSTERED | NECLUSTERED

Určuje, že se clusterovaný nebo neclusterovaný index vytvoří pro omezení PRIMARY KEY nebo UNIQUE. Omezení PRIMÁRNÍHO KLÍČE jsou výchozí pro CLUSTERED. Omezení UNIQUE jsou výchozí pro NONCLUSTERED.

Pokud clusterované omezení nebo index již v tabulce existuje, nelze clusterED zadat. Pokud v tabulce již existuje clusterované omezení nebo index, omezení PRIMÁRNÍHO KLÍČE jsou výchozí na hodnotu NONCLUSTERED.

Sloupce, které jsou typu ntext, text, varchar(max), nvarchar(max), varbinary(max), xml nebo image , nelze zadat jako sloupce indexu.

Ve službě Microsoft Fabric Warehouse nemá nonclustered žádný vliv.

S FILLFAKTOREM = FILLFACTOR

Určuje, jak by měl databázový stroj zaplnit každou indexovou stránku použitou k uložení dat indexu. Uživatelem zadané hodnoty faktoru výplně můžou být od 1 do 100. Pokud není zadaná hodnota, výchozí hodnota je 0.

Important

Dokumentování WITH FILLFACTOR jako jediná možnost indexu, která se vztahuje na omezení PRIMÁRNÍ KLÍČ nebo UNIQUE, je zachována kvůli zpětné kompatibilitě, ale nebude dokumentována tímto způsobem v budoucích verzích. Další možnosti indexu lze zadat v klauzuli index_option alter TABLE.

ON { partition_scheme_name(partition_column_name) | filegroup | default }

platí pro: SQL Server 2008 (10.0.x) a novější.

Určuje umístění úložiště indexu vytvořeného pro omezení. Pokud partition_scheme_name zadáte, index se rozdělí a oddíly se mapují na skupiny souborů určené partition_scheme_name. Pokud je zadána skupina souborů , index se vytvoří v pojmenované skupině souborů. Pokud je zadána hodnota Default nebo pokud není vůbec zadáno ZAPNUTO, index se vytvoří ve stejné skupině souborů jako tabulka. Pokud je zapnuto při přidání clusterovaného indexu pro omezení PRIMÁRNÍ KLÍČ nebo UNIQUE, 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ý, jako v ON default nebo ON [default]. Pokud je zadána výchozí hodnota , QUOTED_IDENTIFIER musí být pro aktuální relaci zapnutá možnost ZAPNUTO. Toto je výchozí nastavení. Další informace naleznete v části SET QUOTED_IDENTIFIER (Transact-SQL).

NEVYNUCOVÁNO

Omezení primárního klíče, jedinečného klíče a cizího klíče v Microsoft Fabric Warehouse vyžadují, aby se NEVYNUCUJE. Aplikace musí udržovat integritu omezení.

ODKAZY NA CIZÍ KLÍČ

Je omezení, které poskytuje referenční integritu dat ve sloupci. Omezení cizího klíče vyžadují, aby každá hodnota ve sloupci byla v zadaném sloupci v odkazované tabulce.

schema_name
Je název schématu, do kterého patří tabulka odkazovaná omezením CIZÍ KLÍČ.

referenced_table_name
Je tabulka odkazovaná omezením CIZÍ KLÍČ.

ref_column
Je sloupec v závorkách odkazovaných novým omezením CIZÍ KLÍČ.

PŘI ODSTRANĚNÍ { ŽÁDNÁ AKCE | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }

Určuje akci, která se stane s řádky v tabulce, která se změní, pokud tyto řádky mají referenční relaci a odkazovaný řádek se odstraní z nadřazené tabulky. Výchozí hodnota není ŽÁDNÁ AKCE.

ŽÁDNÁ AKCE
Databázový stroj SQL Serveru vyvolá chybu a akce odstranění na řádku v nadřazené tabulce se vrátí zpět.

CASCADE
Odpovídající řádky se odstraní z odkazující tabulky, pokud je tento řádek odstraněn z nadřazené tabulky.

SET NULL
Všechny hodnoty, které tvoří cizí klíč, se nastaví 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Í
Při odstranění 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, pokud bude tabulka zahrnuta 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 DELETE CASCADE nelze definovat, INSTEAD OF pokud aktivační událost ON DELETE již v tabulce, která je změněna.

Například v AdventureWorks2025 databázi ProductVendor má tabulka referenční relaci s tabulkou Vendor . ProductVendor. VendorID cizí klíč odkazuje na Vendor. VendorID primární klíč.

Pokud je příkaz DELETE proveden na řádku v Vendor tabulce a akce ON DELETE CASCADE je zadána pro ProductVendor.VendorID, databázový stroj zkontroluje jeden nebo více závislých řádků v ProductVendor tabulce. Pokud nějaké existují, budou závislé řádky v ProductVendor tabulce kromě řádku odkazovaného v Vendor tabulce odstraněny.

Pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci odstranění na Vendor řádku, pokud je v tabulce, která na ni odkazuje, alespoň jeden řádek ProductVendor .

ON UPDATE { NO ACTION | CASCADE | NASTAVIT HODNOTU NULL | NASTAVIT VÝCHOZÍ }

Určuje, co se stane s řádky v tabulce změněné, když tyto řádky mají referenční relaci a odkazovaný řádek se aktualizuje v nadřazené tabulce. Výchozí hodnota není ŽÁDNÁ AKCE.

ŽÁDNÁ AKCE
Databázový stroj 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.

SET NULL
Všechny hodnoty, které tvoří cizí klíč, se nastaví při NULL 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, pokud bude tabulka zahrnuta 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.

U FUNKCE UPDATE CASCADE, SET NULL nebo SET DEFAULT nelze definovat, pokud již v tabulce, která se mění, existuje aktivační událost MÍSTO TRIGGERU PŘI AKTUALIZACI.

Například v AdventureWorks2025 databázi ProductVendor má tabulka referenční relaci s tabulkou Vendor . ProductVendor. VendorID cizí klíč odkazuje na Vendor. VendorID primární klíč.

Pokud je příkaz UPDATE proveden na řádku v Vendor tabulce a ON UPDATE CASCADE je zadána akce pro ProductVendor.VendorID, databázový stroj zkontroluje jeden nebo více závislých řádků v ProductVendor tabulce. Pokud nějaké existují, aktualizuje se kromě řádku odkazovaného v tabulce také závislý řádek v ProductVendorVendor tabulce.

Pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci aktualizace na Vendor řádku, pokud je v tabulce, která na ni odkazuje, alespoň jeden řádek ProductVendor .

NE PRO REPLIKACI
platí pro: SQL Server 2008 (10.0.x) a novější.

Lze zadat pro omezení cizího klíče a omezení CHECK. Pokud je tato klauzule určena pro omezení, omezení se nevynucuje, když agenti replikace provádějí operace vložení, aktualizace nebo odstranění.

CHECK

Je omezení, které vynucuje integritu domény omezením možných hodnot, které lze zadat do sloupce nebo sloupců.

logical_expression
Je logický výraz použitý v omezení CHECK a vrací hodnotu PRAVDA nebo NEPRAVDA. 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

Při přidání omezení CIZÍ KLÍČ nebo CHECK se ověřují všechna existující data pro porušení omezení, pokud není zadána WITH NOCHECK možnost. Pokud dojde k nějakým porušením, funkce ALTER TABLE selže a vrátí se chyba. Když se do existujícího sloupce přidá nové omezení PRIMARY KEY nebo UNIQUE, musí být data ve sloupci nebo sloupcích jedinečná. Pokud jsou nalezeny duplicitní hodnoty, funkce ALTER TABLE selže. Tato WITH NOCHECK možnost nemá žádný vliv při přidání omezení PRIMÁRNÍHO KLÍČE nebo JEDINEČNÉ hodnoty.

Každý primární klíč a omezení UNIQUE vygeneruje index. Počet omezení jedinečného a PRIMÁRNÍho klíče nemůže 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 se ale často používají v kritériích spojení dotazů tím, že odpovídají 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 databázovému stroji rychle najít související data v tabulce cizího klíče.

Examples

Příklady najdete v tématu ALTER TABLE (Transact-SQL).