Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

3 façons de savoir si une colonne est une colonne calculée dans SQL Server

Cet article présente trois façons d'utiliser T-SQL pour savoir si une colonne est une colonne calculée dans SQL Server.

C'est pour quand vous connaissez le nom de la colonne, mais vous ne savez pas s'il s'agit ou non d'une colonne calculée.

La fonction COLUMNPROPERTY()

La COLUMNPROPERTY() La fonction renvoie des informations sur une colonne donnée.

L'une des propriétés acceptées comme argument par cette fonction s'appelle IsComputed . Vous obtiendrez un 1 si la colonne est calculée, et un 0 si ce n'est pas le cas.

SELECT 
  COLUMNPROPERTY(
    OBJECT_ID('dbo.Products'), 
    'TotalValue', 
    'IsComputed') 
    AS [Computed Column?];

Résultat :

+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

Dans ce cas, j'ai vérifié si la valeur TotalValue colonne est une colonne calculée et le résultat est 1 , ce qui signifie qu'il s'agit d'une colonne calculée.

La vue du catalogue système sys.computed_columns

Les sys.computed_columns La vue du catalogue système contient une ligne pour chaque colonne calculée de la base de données. Vous pouvez donc interroger cette vue pour voir si votre colonne est calculée.

SELECT is_computed AS [Computed Column?]
FROM sys.computed_columns
WHERE name = 'TotalValue';

Résultat :

+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

Vous pouvez également utiliser cette vue si vous ne connaissez que le nom de la table. Si vous ne connaissez pas le nom de la colonne, mais que vous essayez simplement de savoir si la table contient une colonne calculée, vous pourriez faire quelque chose comme ceci :

SELECT name AS [Computed Column]
FROM sys.computed_columns
WHERE object_id = OBJECT_ID('dbo.Products');

Résultat :

+-------------------+
| Computed Column   |
|-------------------|
| TotalValue        |
+-------------------+

Dans ce cas, je savais que le nom de la table était Products , j'ai donc utilisé OBJECT_ID() pour obtenir son ID et le faire correspondre avec le object_id colonne (qui est l'ID de l'objet auquel appartient la colonne).

Dans ces exemples, je ne renvoie qu'une seule colonne. Comme pour toute vue, vous pouvez renvoyer autant de colonnes que vous le souhaitez. L'une des colonnes de cette vue contient la définition de la colonne calculée. Voici une requête qui renvoie toutes les colonnes.

SELECT *
FROM sys.computed_columns
WHERE name = 'TotalValue';

Résultat (en utilisant la sortie verticale) :

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

La vue du catalogue système sys.columns

Les sys.computed_columns la vue hérite en fait de son is_computed colonne (et un tas d'autres colonnes) de sys.columns . Par conséquent, vous pouvez également utiliser sys.columns pour vérifier si une colonne est une colonne calculée.

SELECT is_computed
FROM sys.columns
WHERE name = 'TotalValue';

Résultat :

+---------------+
| is_computed   |
|---------------|
| 1             |
+---------------+