2009-09-27 112 views
28

您是否會知道如何獲取SQL Server數據庫表中計算列的列表?獲取數據庫表中計算列的列表(SQL Server)

我發現sys.sp_help表名確實返回這個信息,但只在secord結果集中。

我想知道是否有更好的方法來做到這一點。只返回單個結果集的東西。

任何幫助非常感謝,因爲這是非常嚴重的記錄。

謝謝 Giammarco

回答

48

當然 - 檢查sys.columns系統目錄視圖:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

這讓你在這個數據庫中所有計算列。

如果你想那些只是一個單一的表,使用此查詢:

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

這工作SQL Server 2005和起來的。

UPDATE:甚至還有其中還包含計算列的定義(表達式)一個sys.computed_columns系統目錄視圖 - 以防可能需要的一段時間:-)

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

馬克

7

情況下對於SQL Server 2000的語法是:

SELECT * FROM sys.columns 
WHERE is_computed = 1 

而且稍微有用:

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 

輸出樣本:

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

(6 row(s) affected) 
+0

這也是MS SQL Azure中工作正常。謝謝。 – 2015-12-04 19:24:24

21

如果你想使用INFORMATION_SCHEMA的意見,然後再嘗試

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