Podczas tworzenia kolumny wyliczanej w programie SQL Server istnieje możliwość oznaczenia jej jako „utrwalonej”. Utrwalona kolumna wyliczana to taka, która jest fizycznie przechowywana w tabeli. Jeśli nie określisz, że jest utrwalany, wartość kolumny zostanie obliczona za każdym razem, gdy uruchomisz względem niej zapytanie.
Możesz zapytać o sys.computed_columns
widok katalogu systemowego, aby dowiedzieć się, czy obliczona kolumna jest oznaczona jako utrwalona.
Przykład 1 – Sprawdzanie jednej obliczonej kolumny
Oto przykład, który uruchomiłem w moim środowisku testowym. W tym przypadku sprawdzam wyliczoną kolumnę o nazwie TotalValue
.
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
Wynik:
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
W tym przypadku kolumna jest utrzymywał się.
Jeśli masz wiele kolumn obliczanych o tej samej nazwie, możesz również dodać nazwę tabeli do WHERE
klauzula:
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
Przykład 2 – Zwróć wszystkie przeliczone kolumny
W tym przykładzie zwracam wszystkie obliczone kolumny wraz z ich is_persisted
wartości.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
Wynik:
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
Przykład 3 – Dołącz schemat
W tym przykładzie dołączam za pomocą sys.objects
widok, aby uwzględnić schemat w wynikach.
SELECT SCHEMA_NAME(o.schema_id) AS [Schema], OBJECT_NAME(cc.object_id) AS [Table], cc.name AS [Computed Column], cc.is_persisted FROM sys.computed_columns cc INNER JOIN sys.objects o ON o.object_id = cc.object_id;
Wynik:
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+