Когато създавате изчислена колона в SQL Server, имате опцията да я маркирате като „постоянна“. Постоянна изчислена колона е тази, която се съхранява физически в таблицата. Ако не посочите, че е запазена, тогава стойността на колоната ще се изчислява всеки път, когато изпълнявате заявка към нея.
Можете да направите заявка за sys.computed_columns
изглед на системния каталог, за да разберете дали изчислена колона е маркирана като постоянна.
Пример 1 – Проверка на една изчислена колона
Ето пример, който пуснах в моята тестова среда. В този случай проверявам изчислена колона, наречена TotalValue
.
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
Резултат:
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
В този случай колоната е продължи.
В случай, че имате няколко изчислени колони с едно и също име, можете също да добавите името на таблицата към WHERE
клауза:
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
Пример 2 – Връщане на всички изчислени колони
В този пример връщам всички изчислени колони, заедно с техния is_persisted
стойности.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
Резултат:
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
Пример 3 – Включване на схемата
В този пример се присъединявам с sys.objects
изглед, за да включите схемата в резултатите.
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;
Резултат:
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+