你们中是否有人知道如何获取 SQL Server 数据库表中计算列的列表?
我发现 sys.sp_help tablename 返回此信息,但仅在第二个结果集中。
我正在尝试找出是否有更好的方法。希望只返回单个结果集。
你们中是否有人知道如何获取 SQL Server 数据库表中计算列的列表?
我发现 sys.sp_help tablename 返回此信息,但仅在第二个结果集中。
我正在尝试找出是否有更好的方法。希望只返回单个结果集。
查看 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='<Insert Your Table Name Here>'
对于 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)
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