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

46

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

我发现 sys.sp_help tablename 返回此信息,但仅在第二个结果集中。

我正在尝试找出是否有更好的方法。希望只返回单个结果集。

4个回答

74

查看 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')

42

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

11

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接