2009-09-27 4 views
28

Würde jemand von Ihnen wissen, wie man die Liste berechneter Spalten in einer SQL Server-Datenbanktabelle erhält?Get Liste der berechneten Spalten in der Datenbanktabelle (SQL Server)

Ich fand sys.sp_help tablename gibt diese Informationen zurück, aber nur in der Ergebnismenge.

Ich versuche herauszufinden, ob es einen besseren Weg gibt, dies zu tun. Etwas, das nur eine einzige Ergebnismenge zurückgibt.

Jede Hilfe wird sehr geschätzt, da dies sehr schlecht dokumentiert ist.

Danke, Giammarco

Antwort

48

Sure - überprüfen Sie die sys.columns Systemkatalogsicht:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

Dies gibt Ihnen alle berechneten Spalten in dieser Datenbank enthalten.

Wenn Sie die für nur eine einzige Tabelle möchten, verwenden Sie diese Abfrage:

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

Dies funktioniert auf SQL Server 2005 und höher.

UPDATE: Es gibt sogar eine sys.computed_columns Systemkatalogsicht, die auch die Definition enthält (Ausdruck) der berechneten Spalte - nur für den Fall, dass einige Zeit benötigt werden könnte :-)

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

Marc

7

für SQL Server 2000 ist die Syntax:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

Und die etwas nützlicher:

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 

Beispielausgabe:

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

(6 row(s) affected) 
+0

funktioniert das auch in MS SQL Azure in Ordnung. Vielen Dank. –

21

Wenn Sie die INFORMATION_SCHEMA Ansichten verwenden möchten, dann versuchen Sie

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>' 
Verwandte Themen