获取数据库表中的计算列列表(SQL Server)

时间:2009-09-27 18:40:37

标签: sql sql-server tsql

您是否知道如何获取SQL Server数据库表中的计算列列表?

我发现sys.sp_help tablename确实返回了这些信息,但仅在secord结果集中。

我试图找出是否有更好的方法来做到这一点。只返回单个结果集的东西。

非常感谢任何帮助,因为这是非常糟糕的记录。

谢谢你, Giammarco

4 个答案:

答案 0 :(得分:57)

确定 - 检查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及更高版本。

更新:甚至还有一个sys.computed_columns系统目录视图,它还包含计算列的定义(表达式) - 以防某些时候可能需要: - )

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

马克

答案 1 :(得分:25)

如果您想使用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>'

答案 2 :(得分:8)

对于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)

答案 3 :(得分:1)

如果您有许多带有计算列的表,并且还想查看表名:

SELECT sys.objects.name, sys.computed_columns.name
from sys.computed_columns 
inner join sys.objects on sys.objects.object_id = sys.computed_columns.object_id
order by sys.objects.name