W SQL Server istnieje kilka widoków wykazu systemowego, które umożliwiają uzyskanie listy obliczonych kolumn w bazie danych.
Jeden z tych widoków nazywa się sys.computed_columns
. Drugi to sys.columns
.
Widok sys.computed_columns
sys.computed_columns
widok katalogu systemowego zawiera jeden wiersz dla każdej obliczonej kolumny w bazie danych. Dlatego możesz uruchomić proste zapytanie, aby uzyskać listę obliczonych kolumn.
SELECT OBJECT_NAME(object_id) AS [Parent], name AS [Computed Column], definition, is_persisted FROM sys.computed_columns;
Wynik:
+----------+-------------------+--------------------------------------+----------------+ | Parent | Computed Column | definition | is_persisted | |----------+-------------------+--------------------------------------+----------------| | Person | FullName | (concat([FirstName],' ',[LastName])) | 0 | | Products | TotalValue | ([Quantity]*[Price]) | 1 | +----------+-------------------+--------------------------------------+----------------+
Większość kolumn tego widoku jest dziedziczona z sys.columns
pogląd. Zamieściłem tutaj tylko garstkę.
Jedna z zalet tego widoku w porównaniu z sys.columns
polega na tym, że zwraca definicję kolumny wyliczanej, która może być przydatna w zależności od sytuacji. Zawiera również is_persisted
flaga, która informuje, czy wyliczona kolumna jest utrwalana. Jeśli kolumna jest utrwalona, obliczona wartość kolumny jest fizycznie przechowywana w tabeli. Jeśli nie, jest on obliczany w momencie zapytania o kolumnę.
Widok sys.columns
Możesz także uruchomić zapytanie w sys.columns
aby zwrócić kolumny obliczeniowe. Jeśli to zrobisz, musisz przefiltrować wyniki, aby uwzględnić tylko kolumny obliczone. Możesz to zrobić za pomocą WHERE
klauzula is_computed
kolumna.
Przykład:
SELECT OBJECT_NAME(object_id) as Parent, name AS [Computed Column] FROM sys.columns WHERE is_computed = 1;
Wynik:
+----------+-------------------+ | Parent | Computed Column | |----------+-------------------| | Person | FullName | | Products | TotalValue | +----------+-------------------+
Ten widok nie zawiera definition
, is_persisted
lub uses_database_collation
kolumny, które sys.computed_columns
zawiera.