您是否知道如何获取SQL Server数据库表中的计算列列表?
我发现sys.sp_help tablename确实返回了这些信息,但仅在secord结果集中。
我试图找出是否有更好的方法来做到这一点。只返回单个结果集的东西。
非常感谢任何帮助,因为这是非常糟糕的记录。
谢谢你, Giammarco
答案 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