Dans SQL Server, vous pouvez utiliser le sys.columns
vue du catalogue système pour renvoyer une liste de colonnes non calculées à partir d'une table.
Par "non calculées", j'entends simplement des colonnes qui ne sont pas des colonnes calculées.
Exemple
Voici un exemple pour illustrer.
SELECT name AS [Column], TYPE_NAME(user_type_id) AS [Data Type], max_length, is_computed FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Products' AND is_computed = 0;
Résultat :
+-------------+-------------+--------------+---------------+ | Column | Data Type | max_length | is_computed | |-------------+-------------+--------------+---------------| | ProductID | int | 4 | 0 | | ProductName | varchar | 255 | 0 | | Quantity | smallint | 2 | 0 | | Price | money | 8 | 0 | +-------------+-------------+--------------+---------------+
Les sys.columns
view renvoie beaucoup de colonnes, je les ai donc réduites ici à une poignée.
Dans ce cas, le nom de la table est Products
. Si je ne filtre pas par cela, j'obtiendrai une très grande liste de colonnes de toutes les tables (y compris les tables système), des vues, des fonctions table, etc.
J'ai inclus le is_computed
colonne ici juste pour que vous puissiez voir que ces colonnes ont 0
dans cette colonne.
Je sais que cette table a une colonne calculée appelée TotalValue
. Voici à nouveau la requête, mais cette fois en renvoyant toutes les colonnes (y compris les colonnes calculées).
SELECT name AS [Column], TYPE_NAME(user_type_id) AS [Data Type], max_length, is_computed FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Products';
Résultat :
+-------------+-------------+--------------+---------------+ | Column | Data Type | max_length | is_computed | |-------------+-------------+--------------+---------------| | ProductID | int | 4 | 0 | | ProductName | varchar | 255 | 0 | | Quantity | smallint | 2 | 0 | | Price | money | 8 | 0 | | TotalValue | money | 8 | 1 | +-------------+-------------+--------------+---------------+