Tento článek představuje tři způsoby, jak pomocí T-SQL zjistit, zda je sloupec vypočítaným sloupcem na serveru SQL.
Toto je, když znáte název sloupce, ale nevíte, zda se jedná nebo nejedná o vypočítaný sloupec.
Funkce COLUMNPROPERTY()
COLUMNPROPERTY()
Funkce vrací informace o daném sloupci.
Jedna z vlastností, kterou tato funkce přijímá jako argument, se nazývá IsComputed
. Dostanete 1, pokud je sloupec vypočítán, a 0, pokud není.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Výsledek:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
V tomto případě jsem zkontroloval, zda TotalValue
sloupec je vypočítaný sloupec a výsledek je 1
, což znamená, že se jedná o vypočítaný sloupec.
Zobrazení katalogu systému sys.computed_columns
sys.computed_columns
pohled systémového katalogu obsahuje jeden řádek pro každý vypočítaný sloupec v databázi. Můžete se tedy dotazovat na toto zobrazení a zjistit, zda je váš sloupec vypočítán.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Výsledek:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
Toto zobrazení můžete také použít, pokud znáte pouze název tabulky. Pokud neznáte název sloupce, ale pouze se snažíte zjistit, zda tabulka obsahuje vypočítaný sloupec, můžete udělat něco takového:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Výsledek:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
V tomto případě jsem věděl, že název tabulky je Products
, takže jsem použil OBJECT_ID()
získat jeho ID a porovnat ho s object_id
sloupec (což je ID objektu, ke kterému sloupec patří).
V těchto příkladech vracím pouze jeden sloupec. Jako u každého zobrazení můžete vrátit tolik sloupců, kolik chcete. Jeden ze sloupců z tohoto zobrazení obsahuje definici vypočítaného sloupce. Zde je dotaz, který vrátí všechny sloupce.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Výsledek (při použití vertikálního výstupu):
object_id | 814625945 name | TotalValue column_id | 5 system_type_id | 60 user_type_id | 60 max_length | 8 precision | 19 scale | 4 collation_name | NULL is_nullable | 1 is_ansi_padded | 0 is_rowguidcol | 0 is_identity | 0 is_filestream | 0 is_replicated | 0 is_non_sql_subscribed | 0 is_merge_published | 0 is_dts_replicated | 0 is_xml_document | 0 xml_collection_id | 0 default_object_id | 0 rule_object_id | 0 definition | ([Quantity]*[Price]) uses_database_collation | 1 is_persisted | 1 is_computed | 1 is_sparse | 0 is_column_set | 0 generated_always_type | 0 generated_always_type_desc | NOT_APPLICABLE encryption_type | NULL encryption_type_desc | NULL encryption_algorithm_name | NULL column_encryption_key_id | NULL column_encryption_key_database_name | NULL is_hidden | 0 is_masked | 0 graph_type | NULL graph_type_desc | NULL
Zobrazení systémového katalogu sys.columns
sys.computed_columns
pohled ve skutečnosti zdědí svůj is_computed
sloupec (a spousta dalších sloupců) z sys.columns
. Proto můžete také použít sys.columns
zkontrolovat, zda je sloupec vypočteným sloupcem.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Výsledek:
+---------------+ | is_computed | |---------------| | 1 | +---------------+