В SQL Server има няколко изгледа на системен каталог, които ви позволяват да получите списък с изчислени колони в база данни.
Един от тези изгледи се нарича sys.computed_columns
. Другият е sys.columns
.
Изгледът sys.computed_columns
sys.computed_columns
изгледът на системния каталог съдържа един ред за всяка изчислена колона в базата данни. Следователно можете да изпълните проста заявка, за да получите списък с изчислени колони.
SELECT OBJECT_NAME(object_id) AS [Parent], name AS [Computed Column], definition, is_persisted FROM sys.computed_columns;
Резултат:
+----------+-------------------+--------------------------------------+----------------+ | Parent | Computed Column | definition | is_persisted | |----------+-------------------+--------------------------------------+----------------| | Person | FullName | (concat([FirstName],' ',[LastName])) | 0 | | Products | TotalValue | ([Quantity]*[Price]) | 1 | +----------+-------------------+--------------------------------------+----------------+
Повечето от колоните на този изглед са наследени от sys.columns
изглед. Тук включих само шепа.
Едно от предимствата на този изглед пред sys.columns
, е, че връща дефиницията на изчислената колона, което може да бъде полезно в зависимост от ситуацията. Той също така включва is_persisted
флаг, който ви казва дали изчислената колона се запазва или не. Ако колоната се запази, изчислената стойност на колоната се съхранява физически в таблицата. Ако не, то се изчислява в момента, в който заявите колоната.
Изгледът sys.columns
Можете също да изпълните заявка срещу sys.columns
за връщане на изчислени колони. Ако направите това, ще трябва да филтрирате резултатите, така че да включват само изчислени колони. Можете да направите това с WHERE
клауза на is_computed
колона.
Пример:
SELECT OBJECT_NAME(object_id) as Parent, name AS [Computed Column] FROM sys.columns WHERE is_computed = 1;
Резултат:
+----------+-------------------+ | Parent | Computed Column | |----------+-------------------| | Person | FullName | | Products | TotalValue | +----------+-------------------+
Този изглед не съдържа definition
, is_persisted
, или uses_database_collation
колони, които sys.computed_columns
съдържа.