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

Comment vérifier si une colonne calculée est "persistante" dans SQL Server

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