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.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Určuje vlastnosti počítaného sloupce přidaného do tabulky pomocí funkce ALTER TABLE.
Syntax
column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[
[ CONSTRAINT constraint_name ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ WITH ( <index_option> [, ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ) | filegroup
| "default" } ]
| [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE } ]
[ ON UPDATE { NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]
Arguments
column_name
Je název sloupce, který se má změnit, přidat nebo vynechat. column_name může mít 1 až 128 znaků. U nových sloupců je možné u sloupců vytvořených s datovým typem časového razítka vynechat column_name. Pokud pro sloupec datového typu časového razítka není zadán žádný column_name, použije se časové razítko názvu.
computed_column_expression
Je výraz, který definuje hodnotu počítaného sloupce. Vypočítaný sloupec je virtuální sloupec, který není fyzicky uložený v tabulce, ale počítá se z výrazu, který používá jiné sloupce ve stejné tabulce. Výraz musí přinést hodnotu. Počítaný sloupec může mít například definici: cena AS nákladů * qty. Další příklad s bitovými operátory: is_finalised AS is_checked | is_approved. Výrazem může být nespočítaný název sloupce, konstanta, funkce, proměnná a libovolná kombinace těchto operátorů spojených jedním nebo více operátory. Výraz nemůže být podmínkou hledání, poddotazem nebo zahrnutím datového typu aliasu.
Počítané sloupce se dají použít ve vybraných seznamech, klauzulích WHERE, klauzulích ORDER BY nebo v jiných umístěních, kde lze použít regulární výrazy, ale s následujícími výjimkami:
Počítaný sloupec nelze použít jako definici omezení DEFAULT nebo FOREIGN KEY nebo s definicí omezení NOT NULL. Pokud je však vypočítaná hodnota sloupce definována deterministickým výrazem a datový typ výsledku je povolen ve sloupcích indexu, počítaný sloupec se dá použít jako klíčový sloupec v indexu nebo jako součást jakéhokoli omezení PRIMARY KEY nebo UNIQUE.
Pokud například tabulka obsahuje celočíselné sloupce a a b, počítaný sloupec a + b může být indexován, ale vypočítaný sloupec a + DATEPART(dd, GETDATE()) nelze indexovat, protože hodnota se může v následných vyvolání změnit.
Vypočítaný sloupec nemůže být cílem příkazu INSERT nebo UPDATE.
Note
Vzhledem k tomu, že každý řádek v tabulce může mít různé hodnoty pro sloupce zahrnuté do počítaného sloupce, nemusí mít vypočítaný sloupec stejný výsledek pro každý řádek.
PERSISTED
Určuje, že databázový stroj fyzicky uloží vypočítané hodnoty v tabulce a aktualizuje hodnoty, když se aktualizují všechny ostatní sloupce, na kterých závisí vypočítaný sloupec. Označení počítaného sloupce jako PERSISTED umožňuje vytvoření indexu na počítaném sloupci, který je deterministický, ale není přesný. Další informace najdete v tématu Indexy vypočítaných sloupců. Všechny počítané sloupce použité jako dělení sloupců dělené tabulky musí být explicitně označeny PERSISTED. computed_column_expression musí být deterministický, pokud je zadána funkce PERSISTED.
NULL | NE NULL
Určuje, zda jsou ve sloupci povoleny hodnoty null. HODNOTA NULL není výhradně omezení, ale lze ji zadat jako NOT NULL. HODNOTU NOT NULL lze zadat pro počítané sloupce pouze v případě, že je zadána funkce PERSISTED.
CONSTRAINT
Určuje začátek definice pro omezení PRIMARY KEY nebo UNIQUE.
constraint_name
Je nové 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.
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 konkrétní 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.
S FILLFAKTOREM = FILLFACTOR
Určuje, jak by měl databázový stroj SQL Serveru zaplnit každou stránku indexu použitou k uložení dat indexu. Uživatelem zadané hodnoty fillfactor mohou být od 1 do 100. Pokud není zadaná hodnota, výchozí hodnota je 0.
Important
Dokumentování POMOCÍ FILLFACTOR = fillfactor jako jediná možnost indexu, která se vztahuje na omezení PRIMÁRNÍ KLÍČ nebo JEDINEČNÉ, 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 (Transact-SQL) příkazu ALTER TABLE.
ODKAZY NA CIZÍ KLÍČ
Je omezení, které poskytuje referenční integritu dat ve sloupci nebo sloupcích. Omezení CIZÍHO KLÍČE vyžadují, aby každá hodnota ve sloupci existovala v odpovídajícím odkazovaném sloupci nebo sloupcích v odkazované tabulce. Omezení CIZÍHO KLÍČE můžou odkazovat pouze na sloupce, které jsou omezení PRIMARY KEY nebo UNIQUE v odkazované tabulce nebo sloupcích odkazovaných v indexu UNIQUE v odkazované tabulce. Cizí klíče ve vypočítaných sloupcích musí být také označeny JAKO TRVALÉ.
ref_table
Je název tabulky odkazované omezením CIZÍ KLÍČ.
(ref_column )
Je sloupec z tabulky odkazovaný omezením CIZÍ KLÍČ.
PŘI ODSTRANĚNÍ { ŽÁDNÁ AKCE | CASCADE }
Určuje, jaká akce se stane s řádky v tabulce, 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 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.
Například v AdventureWorks2025 databázi má tabulka ProductVendor referenční relaci s tabulkou Vendor. Cizí klíč ProductVendor.BusinessEntityID odkazuje na primární klíč Vendor.BusinessEntityID.
Pokud je příkaz DELETE proveden na řádku v tabulce Vendor a akce ON DELETE CASCADE je zadána pro ProductVendor.BusinessEntityID, databázový stroj zkontroluje jeden nebo více závislých řádků v tabulce ProductVendor. Pokud nějaké existují, odstraní se závislé řádky v tabulce ProductVendor kromě řádku odkazovaného v tabulce Vendor.
Naopak pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci odstranění na řádku Dodavatele, pokud je v tabulce ProductVendor alespoň jeden řádek, který na ni odkazuje.
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.
NA AKTUALIZACI { ŽÁDNÁ AKCE }
Určuje, jaká akce se stane s řádky v tabulce vytvořené v případě, že tyto řádky mají referenční relaci a odkazovaný řádek se aktualizuje v nadřazené tabulce. Pokud není zadána ŽÁDNÁ AKCE, databázový stroj vyvolá chybu a vrátí akci aktualizace na řádku Dodavatele, pokud existuje alespoň jeden řádek v tabulce ProductVendor, která na ni odkazuje.
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ů. Omezení CHECK u počítaných sloupců musí být označená také jako TRVALÁ.
logical_expression
Je logický výraz, který vrací hodnotu PRAVDA nebo NEPRAVDA. Výraz nemůže obsahovat odkaz na datový typ aliasu.
ON { partition_scheme_name(partition_column_name) | filegroup| "výchozí"}
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ů.
Note
V tomto kontextu není výchozí klíčové slovo. Jedná se o identifikátor výchozí skupiny souborů, který musí být oddělený, jako v on "default" nebo ON [default]. Pokud je zadána možnost výchozí, musí být pro aktuální relaci možnost QUOTED_IDENTIFIER zapnutá. Toto je výchozí nastavení. Další informace naleznete v části SET QUOTED_IDENTIFIER (Transact-SQL).
Remarks
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.
SET QUOTED_IDENTIFIER při vytváření nebo změně indexů ve vypočítaných sloupcích nebo indexovaných zobrazeních musí být ZAPNUTO. Další informace naleznete v části SET QUOTED_IDENTIFIER (Transact-SQL).
Ve službě Fabric SQL Database je možné vytvářet počítané sloupce, ale přeskočí se ze zrcadlení do Fabric OneLake.