2009-09-27 6 views
28

L'un de vous saura-t-il comment obtenir la liste des colonnes calculées dans une table de base de données SQL Server?Obtenir la liste des colonnes calculées dans la table de base de données (SQL Server)

J'ai trouvé sys.sp_help nomtable retourne cette information, mais seulement dans le jeu de résultats secord. J'essaye de savoir s'il y a une meilleure manière de faire ceci. Quelque chose qui ne renvoie qu'un seul ensemble de résultats.

Toute aide est très appréciée, car elle est très mal documentée.

Merci, Giammarco

Répondre

48

Bien sûr - vérifier la vue du catalogue système sys.columns:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

Cela vous donne toutes les colonnes calculées dans cette base de données.

Si vous voulez ceux pour juste une seule table, utilisez cette requête:

SELECT * FROM sys.columns 
WHERE is_computed = 1 
AND object_id = OBJECT_ID('YourTableName') 

Cela fonctionne sur SQL Server 2005 et plus.

MISE À JOUR: Il y a même une vue du catalogue système sys.computed_columns qui contient également la définition (expression) de la colonne calculée - juste au cas qui pourrait être nécessaire un certain temps :-)

SELECT * FROM sys.computed_columns 
WHERE object_id = OBJECT_ID('YourTableName') 

Marc

7

pour SQL Server 2000, la syntaxe est:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

Et un peu plus utile:

SELECT 
    sysobjects.name AS TableName, 
    syscolumns.name AS ColumnName 
FROM syscolumns 
    INNER JOIN sysobjects 
    ON syscolumns.id = sysobjects.id 
    AND sysobjects.xtype = 'U' --User Tables 
WHERE syscolumns.iscomputed = 1 
sortie

exemple:

TableName    ColumnName 
===================== ========== 
BrinksShipmentDetails Total 
AdjustmentDetails  Total 
SoftCountDropDetails Total 
CloserDetails   Total 
OpenerDetails   Total 
TransferDetails  Total 

(6 row(s) affected) 
+0

cela fonctionne aussi bien dans MS SQL Azure. Merci. –

21

Si vous souhaitez utiliser les INFORMATION_SCHEMA vues, puis essayez

SELECT 
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME),COLUMN_NAME,'IsComputed') 
    AS IS_COMPUTED, 
* 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='<Insert Your Table Name Here>' 
Questions connexes