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