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.