Dieser Artikel stellt drei Möglichkeiten vor, T-SQL zu verwenden, um herauszufinden, ob eine Spalte eine berechnete Spalte in SQL Server ist.
Dies ist der Fall, wenn Sie den Spaltennamen kennen, aber nicht wissen, ob es sich um eine berechnete Spalte handelt oder nicht.
Die COLUMNPROPERTY()-Funktion
Die COLUMNPROPERTY()
Die Funktion gibt Informationen zu einer bestimmten Spalte zurück.
Eine der Eigenschaften, die von dieser Funktion als Argument akzeptiert wird, heißt IsComputed
. Sie erhalten eine 1, wenn die Spalte berechnet wird, und eine 0, wenn dies nicht der Fall ist.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Ergebnis:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
In diesem Fall habe ich überprüft, ob der TotalValue
Spalte ist eine berechnete Spalte, und das Ergebnis ist 1
, was bedeutet, dass es sich um eine berechnete Spalte handelt.
Die sys.computed_columns-Systemkatalogansicht
Die sys.computed_columns
Die Systemkatalogansicht enthält eine Zeile für jede berechnete Spalte in der Datenbank. Sie können diese Ansicht daher abfragen, um zu sehen, ob Ihre Spalte berechnet wird.
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
Ergebnis:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
Sie können diese Ansicht auch verwenden, wenn Sie nur den Tabellennamen kennen. Wenn Sie den Namen der Spalte nicht kennen, aber einfach herausfinden möchten, ob die Tabelle eine berechnete Spalte enthält, könnten Sie etwa so vorgehen:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
Ergebnis:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
In diesem Fall wusste ich, dass der Tabellenname Products
war , also habe ich OBJECT_ID()
verwendet um seine ID zu erhalten und diese mit der object_id
abzugleichen Spalte (das ist die ID des Objekts, zu dem die Spalte gehört).
In diesen Beispielen gebe ich nur eine Spalte zurück. Wie bei jeder Ansicht können Sie beliebig viele Spalten zurückgeben. Eine der Spalten dieser Ansicht enthält die Definition der berechneten Spalte. Hier ist eine Abfrage, die alle Spalten zurückgibt.
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
Ergebnis (bei vertikaler Ausgabe):
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
Die sys.columns-Systemkatalogansicht
Die sys.computed_columns
view erbt tatsächlich seinen is_computed
Spalte (und eine Menge anderer Spalten) aus sys.columns
. Daher können Sie auch sys.columns
verwenden um zu überprüfen, ob eine Spalte eine berechnete Spalte ist.
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
Ergebnis:
+---------------+ | is_computed | |---------------| | 1 | +---------------+