Тази статия представя три начина за използване на T-SQL, за да разберете дали дадена колона е изчислена колона в SQL Server.
Това е за случаите, когато знаете името на колоната, но не знаете дали е изчислена колона или не.
Функцията COLUMNPROPERTY()
COLUMNPROPERTY()
функцията връща информация за дадена колона.
Едно от свойствата, приети като аргумент от тази функция, се нарича IsComputed
. Ще получите 1, ако колоната е изчислена, и 0, ако не е.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Резултат:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
В този случай проверих дали TotalValue
колоната е изчислена колона и резултатът е 1
, което означава, че е изчислена колона.
Изгледът на системния каталог sys.computed_columns
sys.computed_columns
изгледът на системния каталог съдържа един ред за всяка изчислена колона в базата данни. Следователно можете да направите заявка за този изглед, за да видите дали вашата колона е изчислена.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Резултат:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
Можете също да използвате този изглед, ако знаете само името на таблицата. Ако не знаете името на колоната, но просто се опитвате да разберете дали таблицата съдържа изчислена колона, можете да направите нещо подобно:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Резултат:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
В този случай знаех, че името на таблицата е Products
, така че използвах OBJECT_ID()
за да получите неговия идентификатор и да го съпоставите с object_id
колона (който е идентификационният номер на обекта, към който принадлежи колоната).
В тези примери връщам само една колона. Както при всеки изглед, можете да върнете толкова колони, колкото искате. Една от колоните от този изглед съдържа дефиницията на изчислената колона. Ето заявка, която връща всички колони.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Резултат (с помощта на вертикален изход):
object_id | 814625945 name | TotalValue column_id | 5 system_type_id | 60 user_type_id | 60 max_length | 8 precision | 19 scale | 4 collation_name | NULL is_nullable | 1 is_ansi_padded | 0 is_rowguidcol | 0 is_identity | 0 is_filestream | 0 is_replicated | 0 is_non_sql_subscribed | 0 is_merge_published | 0 is_dts_replicated | 0 is_xml_document | 0 xml_collection_id | 0 default_object_id | 0 rule_object_id | 0 definition | ([Quantity]*[Price]) uses_database_collation | 1 is_persisted | 1 is_computed | 1 is_sparse | 0 is_column_set | 0 generated_always_type | 0 generated_always_type_desc | NOT_APPLICABLE encryption_type | NULL encryption_type_desc | NULL encryption_algorithm_name | NULL column_encryption_key_id | NULL column_encryption_key_database_name | NULL is_hidden | 0 is_masked | 0 graph_type | NULL graph_type_desc | NULL
Изгледът на системния каталог sys.columns
sys.computed_columns
изгледът всъщност наследява своя is_computed
колона (и куп други колони) от sys.columns
. Следователно можете да използвате и sys.columns
за да проверите дали дадена колона е изчислена колона.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Резултат:
+---------------+ | is_computed | |---------------| | 1 | +---------------+