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.