你们中的任何人都知道如何获取SQL Server数据库表中的计算列列表吗?
我发现sys.sp_help tablename确实返回了这个信息,但仅在secord结果集中.
我试图找出是否有更好的方法来做到这一点.只返回单个结果集的东西.
非常感谢任何帮助,因为这是非常糟糕的文件.
谢谢你,Giammarco
当然 - 检查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')
渣
如果要使用INFORMATION_SCHEMA
视图,请尝试
SELECT COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME),COLUMN_NAME,'IsComputed') AS IS_COMPUTED, * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=''
对于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)