Lorsque vous créez une colonne calculée dans SQL Server, vous avez la possibilité de la marquer comme « persistante ». Une colonne calculée persistante est une colonne stockée physiquement dans la table. Si vous ne spécifiez pas qu'elle est persistante, la valeur de la colonne sera calculée chaque fois que vous exécuterez une requête dessus.
Vous pouvez interroger le sys.computed_columns
vue du catalogue système pour savoir si une colonne calculée est marquée comme persistante.
Exemple 1 - Vérification d'une colonne calculée
Voici un exemple que j'ai exécuté dans mon environnement de test. Dans ce cas, je vérifie une colonne calculée appelée TotalValue
.
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
Résultat :
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
Dans ce cas, la colonne est a persisté.
Si vous avez plusieurs colonnes calculées portant le même nom, vous pouvez également ajouter le nom de la table au WHERE
clause :
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
Exemple 2 - Renvoyer toutes les colonnes calculées
Dans cet exemple, je renvoie toutes les colonnes calculées, ainsi que leur is_persisted
valeurs.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
Résultat :
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
Exemple 3 - Inclure le schéma
Dans cet exemple, je joins avec le sys.objects
vue pour inclure le schéma dans les résultats.
SELECT SCHEMA_NAME(o.schema_id) AS [Schema], OBJECT_NAME(cc.object_id) AS [Table], cc.name AS [Computed Column], cc.is_persisted FROM sys.computed_columns cc INNER JOIN sys.objects o ON o.object_id = cc.object_id;
Résultat :
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+