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

Renvoyer une liste de colonnes calculées dans SQL Server

Dans SQL Server, il existe quelques vues de catalogue système qui vous permettent d'obtenir une liste de colonnes calculées dans une base de données.

L'une de ces vues s'appelle sys.computed_columns . L'autre est sys.columns .

La vue 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. Par conséquent, vous pouvez exécuter une requête simple pour obtenir une liste de colonnes calculées.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Résultat :

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

La plupart des colonnes de cette vue sont héritées de sys.columns voir. Je n'en ai inclus qu'une poignée ici.

L'un des avantages de cette vue par rapport à sys.columns , est qu'il renvoie la définition de la colonne calculée, ce qui peut être utile selon la situation. Il inclut également le is_persisted flag, qui vous indique si la colonne calculée est persistante ou non. Si la colonne est persistante, la valeur calculée de la colonne est stockée physiquement dans la table. Sinon, il est calculé au moment où vous interrogez la colonne.

La vue sys.columns

Vous pouvez également exécuter une requête sur sys.columns pour renvoyer des colonnes calculées. Si vous faites cela, vous devrez filtrer les résultats pour inclure uniquement les colonnes calculées. Vous pouvez le faire avec un WHERE clause sur is_computed colonne.

Exemple :

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Résultat :

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Cette vue ne contient pas la definition , is_persisted , ou le uses_database_collation colonnes qui sys.computed_columns contient.