Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

3 Möglichkeiten, um herauszufinden, ob eine Spalte eine berechnete Spalte in SQL Server ist

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             |
+---------------+