V SQL Server existuje několik pohledů systémového katalogu, které vám umožňují získat seznam vypočítaných sloupců v databázi.
Jedno z těchto zobrazení se nazývá sys.computed_columns
. Druhým je sys.columns
.
Zobrazení sys.computed_columns
sys.computed_columns
pohled systémového katalogu obsahuje jeden řádek pro každý vypočítaný sloupec v databázi. Proto můžete spustit jednoduchý dotaz a získat seznam vypočítaných sloupců.
SELECT OBJECT_NAME(object_id) AS [Parent], name AS [Computed Column], definition, is_persisted FROM sys.computed_columns;
Výsledek:
+----------+-------------------+--------------------------------------+----------------+ | Parent | Computed Column | definition | is_persisted | |----------+-------------------+--------------------------------------+----------------| | Person | FullName | (concat([FirstName],' ',[LastName])) | 0 | | Products | TotalValue | ([Quantity]*[Price]) | 1 | +----------+-------------------+--------------------------------------+----------------+
Většina sloupců tohoto zobrazení je zděděna z sys.columns
Pohled. Zahrnul jsem sem jen hrstku.
Jedna z výhod tohoto zobrazení oproti sys.columns
, je to, že vrací definici vypočítaného sloupce, což může být užitečné v závislosti na situaci. Zahrnuje také is_persisted
příznak, který vám řekne, zda je vypočítaný sloupec zachován. Pokud je sloupec trvalý, vypočítaná hodnota sloupce se fyzicky uloží do tabulky. Pokud ne, vypočítá se v době, kdy se dotazujete na sloupec.
Zobrazení sys.columns
Můžete také spustit dotaz proti sys.columns
vrátit vypočítané sloupce. Pokud to uděláte, budete muset filtrovat výsledky tak, aby zahrnovaly pouze vypočítané sloupce. Můžete to udělat pomocí WHERE
klauzule na is_computed
sloupec.
Příklad:
SELECT OBJECT_NAME(object_id) as Parent, name AS [Computed Column] FROM sys.columns WHERE is_computed = 1;
Výsledek:
+----------+-------------------+ | Parent | Computed Column | |----------+-------------------| | Person | FullName | | Products | TotalValue | +----------+-------------------+
Toto zobrazení neobsahuje definition
, is_persisted
nebo uses_database_collation
sloupce, které sys.computed_columns
obsahuje.