Den här artikeln presenterar tre sätt att använda T-SQL för att ta reda på om en kolumn är en beräknad kolumn i SQL Server.
Detta är för när du känner till kolumnnamnet, men du inte vet om det är en beräknad kolumn.
Funktionen COLUMNPROPERTY()
COLUMNPROPERTY()
funktion returnerar information om en given kolumn.
En av egenskaperna som accepteras som argument av denna funktion kallas IsComputed
. Du får en 1 om kolumnen beräknas och en 0 om den inte är det.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Resultat:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
I det här fallet kollade jag för att se om TotalValue
kolumn är en beräknad kolumn och resultatet är 1
, vilket betyder att det är en beräknad kolumn.
Systemkatalogvyn sys.computed_columns
sys.computed_columns
systemkatalogvyn innehåller en rad för varje beräknad kolumn i databasen. Du kan därför fråga den här vyn för att se om din kolumn är beräknad.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Resultat:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
Du kan också använda den här vyn om du bara känner till tabellnamnet. Om du inte vet namnet på kolumnen, men du bara försöker ta reda på om tabellen innehåller en beräknad kolumn, kan du göra något så här:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Resultat:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
I det här fallet visste jag att tabellnamnet var Products
, så jag använde OBJECT_ID()
för att få dess ID och matcha det med object_id
kolumn (vilket är ID för objektet som kolumnen tillhör).
I dessa exempel returnerar jag bara en kolumn. Som med alla vyer kan du returnera så många kolumner du vill. En av kolumnerna från den här vyn innehåller den beräknade kolumns definition. Här är en fråga som returnerar alla kolumner.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Resultat (med vertikal utdata):
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
Systemkatalogvyn sys.columns
sys.computed_columns
vyn ärver faktiskt sin is_computed
kolumn (och ett gäng andra kolumner) från sys.columns
. Därför kan du också använda sys.columns
för att kontrollera om en kolumn är en beräknad kolumn.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Resultat:
+---------------+ | is_computed | |---------------| | 1 | +---------------+