In dit artikel worden drie manieren beschreven om T-SQL te gebruiken om erachter te komen of een kolom een berekende kolom is in SQL Server.
Dit is voor als u de kolomnaam kent, maar niet weet of het een berekende kolom is.
De COLUMNPROPERTY()-functie
De COLUMNPROPERTY()
functie retourneert informatie over een bepaalde kolom.
Een van de eigenschappen die door deze functie als een argument worden geaccepteerd, heet IsComputed
. U krijgt een 1 als de kolom is berekend en een 0 als dit niet het geval is.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Resultaat:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
In dit geval heb ik gecontroleerd of de TotalValue
kolom is een berekende kolom en het resultaat is 1
, wat betekent dat het een berekende kolom is.
De systeemcatalogusweergave sys.computed_columns
De sys.computed_columns
systeemcatalogusweergave bevat één rij voor elke berekende kolom in de database. U kunt daarom deze weergave opvragen om te zien of uw kolom is berekend.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Resultaat:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
U kunt deze weergave ook gebruiken als u alleen de tabelnaam weet. Als u de naam van de kolom niet weet, maar u probeert gewoon te achterhalen of de tabel een berekende kolom bevat, kunt u zoiets als dit doen:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Resultaat:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
In dit geval wist ik dat de tabelnaam Products
was , dus ik gebruikte OBJECT_ID()
om zijn ID te krijgen en dat te matchen met de object_id
kolom (dit is de ID van het object waartoe de kolom behoort).
In deze voorbeelden retourneer ik slechts één kolom. Zoals bij elke weergave kunt u zoveel kolommen retourneren als u wilt. Een van de kolommen in deze weergave bevat de definitie van de berekende kolom. Hier is een zoekopdracht die alle kolommen retourneert.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Resultaat (met verticale uitvoer):
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
De systeemcatalogusweergave sys.columns
De sys.computed_columns
view erft feitelijk zijn is_computed
kolom (en een heleboel andere kolommen) van sys.columns
. Daarom kunt u ook sys.columns
. gebruiken om te controleren of een kolom een berekende kolom is.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Resultaat:
+---------------+ | is_computed | |---------------| | 1 | +---------------+